티스토리 뷰

코니79 IT 정보

VB6 및 Java에서 AES 암호화

코니79 코니와함께 2018.03.13 17:46

VB CODE

strProvider = "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)" &     vbNullChar  

lngHashType = CALG_MD5  

lngAlgoType = CALG_AES_128 

strPassword = "secretPassphrase"

If CBool(CryptAcquireContext(g_lngCryptoContext, ByVal strTemp, _

         ByVal strProvider, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) Then           

    GetProvider = True

else 

    GoTo CleanUp

End If

If Not CBool(CryptCreateHash(g_lngCryptoContext, lngHashType, ByVal 0&, _ByVal 0&, lngHashHnd)) Then

    MsgBox "Error: " & CStr(GetLastError) & " during CryptCreateHash!", _vbExclamation Or vbOKOnly, "Encryption Errors"

    GoTo CleanUp

End If

If Not CBool(CryptHashData(lngHashHnd, strPassword, Len(strPassword), ByVal 0&)) Then

    MsgBox "Error: " & CStr(GetLastError) & " during CryptHashData!", _

           vbExclamation Or vbOKOnly, "Encryption Errors"

    GoTo CleanUp

End If

If Not CBool(CryptDeriveKey(g_lngCryptoContext, lngAlgoType, _lngHashHnd, ByVal CRYPT_NO_SALT, lngkey)) Then

    MsgBox "Error: " & CStr(GetLastError) & " during CryptDeriveKey!", _

           vbExclamation Or vbOKOnly, "Encryption Errors"

    GoTo CleanUp

End If

If lngHashHnd <> 0 Then

    lngRetCode = CryptDestroyHash(lngHashHnd)

End If

lngHashHnd = 0

lngEncDataLength = Len(g_strInData)         

lngEnctBuffLen = lngEncDataLength * 2

strEncBuffer = String$(lngEnctBuffLen, vbNullChar)

LSet strEncBuffer = g_strInData

If Not CBool(CryptEncrypt(lngkey, ByVal 0&, ByVal 1&, ByVal 0&, _strEncBuffer, lngEncDataLength, lngEnctBuffLen)) Then

    MsgBox "Bytes required:" & CStr(lngEnctBuffLen) & vbCrLf & vbCrLf & _

           "Error: " & CStr(GetLastError) & " during CryptEncrypt!", _

           vbExclamation Or vbOKOnly, "Encryption Errors"

    GoTo CleanUp

End If

strOutData = Mid$(strEncBuffer, 1, lngEncDataLength)

g_abytOutData = StringToByteArray(strOutData)

여기까가 VB CODE 샘플 코드 입니다.생각보다 간단하시죠..그럼 더 간단한 JAVA CODE 한번 알아볼게요.




JAVA CODE 

String password = "secretPassphrase";  

String text = "text to encrypt";  

MessageDigest md = MessageDigest.getInstance("MD5");  

md.update(password.getBytes("UTF-8"), 0, password.length());  

byte[] rawKey = md.digest();  

byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};  

IvParameterSpec ivSpec = new IvParameterSpec(iv);  

SecretKeySpec skeySpec = new SecretKeySpec(rawKey, "AES");  

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");  

cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec);  

byte[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));  

System.out.println(toHex(encrypted));



댓글
  • 프로필사진 이재하 안녕하세요 혹시 VB6 된 샘플 소스를 받아 볼 수 있을까요? ㅠ 2018.07.04 15:04 신고
  • 프로필사진 코니79 코니와함께 메일주소하나 주세요. 2018.07.04 17:29 신고
  • 프로필사진 남용석 코니님 안녕하세요 죄송하지만 저도 샘플소스 하나 받아볼수있을까요? 메일 주소입니다~
    ysgasoline@hanmail.net
    2018.07.19 17:10 신고
  • 프로필사진 코니79 코니와함께 용석님 샘플 메일 발송했습니다.관련 내용에 대한 궁금한 부분은 회신 주세요. 2018.07.19 21:31 신고
  • 프로필사진 김명길 코니님,
    저도 안드로이드앱용 암호화/해독화 함수를 만들었는데
    우연히도 cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 으로 똑같습니다.

    이제 vb6과 연동해야 하는데 어찌해야 할지 찾던 중입니다.
    저도 vb6 암호화/해독화 소스가 필요합니다.

    부탁드립니다.

    anfyanfy99@nate.com

    다음은 제가 만든 java 코드입니다

    public static String func암호화결과(String text){

    byte[] keyBytes= new byte[16];
    byte[] b= new byte[0];
    byte[] results = new byte[0];

    Cipher cipher = null;

    try {

    cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    b = pub_companyname.getBytes("UTF-8");

    int len= b.length;
    if (len > keyBytes.length) len = keyBytes.length;

    System.arraycopy(b, 0, keyBytes, 0, len);
    SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
    IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);

    cipher.init(Cipher.ENCRYPT_MODE,keySpec,ivSpec);

    results = cipher.doFinal(text.getBytes("UTF-8"));

    } catch (InvalidKeyException e) {
    e.printStackTrace();
    } catch (InvalidAlgorithmParameterException e) {
    e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
    e.printStackTrace();
    } catch (NoSuchPaddingException e) {
    e.printStackTrace();
    } catch (BadPaddingException e) {
    e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }

    String mm=android.util.Base64.encodeToString(results, 0);
    mm=mm.trim();

    return mm;

    }


    public static String func암호해독결과(String text) {

    // Log.e("func암호해독결과=",text+"");

    Cipher cipher = null;
    byte[] keyBytes= new byte[16];
    byte[] results = new byte[0];

    try {

    cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

    byte[] b= pub_companyname.getBytes("UTF-8");
    int len= b.length; //password와 같은 의미

    if (len > keyBytes.length) len = keyBytes.length;
    System.arraycopy(b, 0, keyBytes, 0, len);
    SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
    IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
    cipher.init(Cipher.DECRYPT_MODE,keySpec,ivSpec);

    results = cipher.doFinal(android.util.Base64.decode(text, 0));

    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    } catch (NoSuchPaddingException e) {
    e.printStackTrace();
    } catch (InvalidKeyException e) {
    e.printStackTrace();
    } catch (InvalidAlgorithmParameterException e) {
    e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
    e.printStackTrace();
    } catch (BadPaddingException e) {
    e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }

    String dec_rtn=null;

    try {
    dec_rtn=new String(results,"UTF-8");
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }

    return dec_rtn;


    }
    2018.10.08 08:20 신고
댓글쓰기 폼
광고위치
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
73,331
Today
1
Yesterday
206
링크
«   2018/10   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
글 보관함