1. ¸ñÀû :
AS-IS ¸®´ª½º ¼¹öÀÇ Cµ¥¸óÀ»
TO-BE ÀÚ¹ÙÇÁ·Î±×·¡¹Ö À¸·Î ±¸Çö.
2. Æ÷ÀÎÆ® :
- ±âÁ¸ C±â¹Ý µ¥¸óÀº ¿ÜºÎ·ÎºÎÅÍ ¾ÏÈ£ÈµÈ Àü¹®À» ¹Þ¾Æ ó¸®ÇÑ´Ù.
- ÀÌ ¾Ïȣȴ openssl ÀÇ EDE CBC 3-DES ¸¦ »ç¿ëÇÏ¿© decrypt ÇÑ´Ù.
- ¾ÏÈ£È key °ª°ú iv °ªÀº °íÁ¤ÇÏ¿© »ç¿ëÇÑ´Ù.
ã¾Æº¸´Ï EDE CBC 3-DES ´Â DES ¾Ïȣȸ¦ 3ÁßÈÇؼ (EDE : Encrypt-Decrypt-Encrypt) »ç¿ëÇÏ´Â
»ç¿ëÇÏ´Â ¹æ½ÄÀ̳׿ä.
java¿ë opensslÀ» ±¸±Û¸µ Çغ¸´Ï ¿ÀÇÂAPI°¡ ÀÖ±äÇѵ¥ Àû¿ëÇؼ ¸¶¹«¸®ÇÏ·Á¸é
Á¦ ªÀº °³¹ß½Ç·ÂÀ¸·Î´Â ¸î³¯ ¸îÀÏ °É¸®°Í°°°í...
°£´ÜÇÏ°Ô java¿¡¼ µ¹¾Æ°¡´Â ¼Ò½º¿¡ key °ªÀ̶û iv ¼ÂÆÃÇؼ
½ÇÁ¦ ¹ÞÀº µ¥ÀÌÅÍ Decrypt Çغ¸´Ï ÇØ´ç ¿À·ù°¡¶ß³×¿ä.
Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded
ã¾Æº¸´Ï Encrypt½Ã key¶û Decrypt½Ã key¶û ´Þ¶ó¼ ¹ñ´Â°Í°°½À´Ï´Ù.
¿©±â¼ Á¦°¡ ¿©Â庸°í ½ÍÀºÁú¹®Àº
javax ¿¡¼ Á¦°øÇÏ´Â ±âº» ¾ÏÈ£È ¶óÀ̺귯¸®·Î opensslÀÇ 3-des ¸¦ ¶È°°ÀÌ ±¸ÇöÇÒ ¼ö ÀÖ³ª?
ÀÔ´Ï´Ù.
»ç½Ç °³¹ßÁ÷±ºÀ¸·Î º¯°æµÈÁö ¾ó¸¶ ¾ÈµÇ¾î ¹è¿òÀÌ ¸Å¿ì ª½À´Ï´Ù..
Á¦´ë·Î Áú¹®ÇÑ°ÇÁöµµ ¸ð¸£°Ú³×¿ä..
ÇãÁ¢ÇÑ Áú¹®µå·Á Á˼ÛÇÕ´Ï´Ù.
¼ÒÁßÇÑ ÀÇ°ß ³»ÁÖ½Ã¸é ´õ °øºÎÇغ¸¸é¼ Âü°íÇÏ°Ú½À´Ï´Ù.
ÇìÇò8668
Ȥ½Ã³ªÇؼ ±âÁ¸¼Ò½º¿Í Å×½ºÆ®ÇÏ°íÀÖ´ø ¼Ò½º °£·«ÇÏ°Ô ¿Ã¸³´Ï´Ù.
(iv°ªÀº º¸¾È¶§¹®¿¡ ¼öÁ¤)
±âÁ¸ ¼Ò½º :
unsigned char *Decrypt( char *Key1, char *Key2, char *Key3, unsigned char *Msg, char *rtnDecrypt)
{
int len;
char unBase64Char[BUFSIZE];
unsigned char in[BUFSIZE], out[BUFSIZE], back[BUFSIZE];
unsigned char cipher[BUFSIZE];
DES_cblock key1, key2, key3;
DES_cblock ivsetup = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
DES_cblock ivec;
DES_key_schedule ks1, ks2, ks3;
memset(in, 0x00, sizeof(in));
memset(out, 0x00, sizeof(out));
memset(back, 0x00, sizeof(back));
memset(cipher, 0x00, sizeof(cipher));
memset(unBase64Char, 0x00, sizeof(unBase64Char));
sprintf((char *)cipher, "%s\n", Msg);
//strcpy(cipher, Msg);
unbase64(&cipher[0], checkSizeInput((char *)cipher), &unBase64Char[0]);
DES_string_to_key (Key1, &key1);
DES_string_to_key (Key2, &key2);
DES_string_to_key (Key3, &key3);
DES_set_key((C_Block *)key1, &ks1);
DES_set_key((C_Block *)key2, &ks2);
DES_set_key((C_Block *)key3, &ks3);
memcpy((char *)in, (const char*)unBase64Char, checkSizeInput((char *)unBase64Char));
len = strlen((const char*)in);
memcpy(ivec, ivsetup, sizeof(ivsetup));
#ifdef MSG_DEBUG
disp_dump(in, checkSizeInput((char *)in));
#endif
DES_ede3_cbc_encrypt(in, out, checkSizeInput((char *)in), &ks1, &ks2, &ks3, &ivec, DES_DECRYPT);
#ifdef MSG_DEBUG
disp_dump(out, checkSizeInput((char *)out));
#endif
strcpy((char *)rtnDecrypt, (const char*)out);
return (unsigned char *)rtnDecrypt;
}
Å×½ºÆ® ¼Ò½º (key´Â ±âÁ¸¼Ò½º¿¡ ÇϵåÄÚµùµÇ¾îÀÖ´ø°Í ÀÔ´Ï´Ù.. º¸¾È¶§¹®¿¡ ¼öÁ¤ÇÏ¿© ¿Ã¸²):
byte [] keyiv ={(byte)0x11,(byte)0x22,(byte)0x33,(byte)0x44,(byte)0x55,(byte)0x66,(byte)0x77,(byte)0x88};
byte [] data = "UmC3IUFbF4ecNBhIgSlpdQ==".getBytes ("UTF-8");
byte [] key = "AAbbhdToooWoCjjjjjdEttts".getBytes("UTF-8");
byte [] str6 = des3DecodeCBC (key, keyiv, data);
System.out.println (new String (str6, "UTF-8"));
}
public static byte[] des3DecodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exception {
Key deskey = null;
DESedeKeySpec spec = new DESedeKeySpec(key);
SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
deskey = keyfactory.generateSecret(spec);
Cipher cipher = Cipher.getInstance("TripleDES/CBC/PKCS5Padding");
IvParameterSpec ips = new IvParameterSpec(keyiv);
cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
byte[] bOut = cipher.doFinal(data);
return bOut;
}
Àâ´ã | 2826¸íÀÌ Àоú¾î¿ä. 3.19.120.87