ÇÁ·Î±×·¡¹Ö
ù ÆäÀÌÁö ·£´ý ±Û ȸ¿ø°¡ÀÔ ·Î±×ÀÎ
ºñ°ø°³ ¼Õ´Ô ¡¦ 2015-12-10 12:11:28
URL https://te31.com/rgr/view.php?id=study&no=1603 ¸ð¹ÙÀÏ È­¸é
°³¹ß ÇãÁ¢ÀÌ Áú¹®Çϳª ¿Ã¸³´Ï´Ù.

¾ËÁö·Õ ¼±¹è´ÔµéÀÇ °í°ßÀ» µè°í½ÍÀ¾´Ï´Ù.

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

0
1 ºñ°ø°³ ¼Õ´Ô ¡¦ 2015-12-10 12:11:48
¿Ã·Á³õ°í º¸´Ï ´õ ÇãÁ¢Çغ¸À̳׿ä...
2 ºñ°ø°³ ¼Õ´Ô ¡¦ 2015-12-10 12:55:20
Exception ³»¿ëÀ» º¸¸é "Given final block not properly padded", Áï ÆеùÀÌ Á¤È®ÇÏÁö ¾Ê´Ù´Â ¶æÀÔ´Ï´Ù.
¿øº» ¼Ò½º¸¦ º¸¸é memsetÀ» ÀÌ¿ëÇÏ¿© zero fill paddingÀ» ÇÏ°í ÀÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.
±×·±µ¥ ÀÚ¹ÙÂÊ ¼Ò½º¿¡´Â PKCS5Padding, Áï PKCS5 ±Ô°ÝÀÇ ÆеùÀ» ÁöÁ¤ÇÏ¿©¼­ ±×·¸½À´Ï´Ù.
Æеù ±Ô°ÝÀ» NoPaddingÀ¸·Î ÁöÁ¤Çؼ­ Çغ¸¼¼¿ä.

ÆеùÀÌ Á¤È®È÷ ¹ºÁö ¸ð¸£½Ã°ÚÀ¸¸é ºí·Ï ¾Ïȣȭ ÆеùÀ¸·Î °Ë»öÀ» Çغ¸¼¼¿ä.
3 ºñ°ø°³ ¼Õ´Ô ¡¦ 2015-12-10 13:03:03
±×¸®°í OpenSSLÀº SSL ±¸ÇöüÁß ÇϳªÀÏ »ÓÀÔ´Ï´Ù.
ÀÚ¹Ù´Â SSL ¼ÒÄÏ Å¬·¡½º¸¦ Áö¿øÇÕ´Ï´Ù.
ÇØ´ç Ŭ·¡½º·Î ¿¬°áÇϸ鼭 ºí·Ï ¾Ïȣȭ ¾Ë°í¸®ÁòÀ» 3DES·Î ¼³Á¤ÇÏ½Ã¸é µË´Ï´Ù.
4 ºñ°ø°³ ¼Õ´Ô ¡¦ 2015-12-10 17:45:37
3/ °¨»çÇÕ´Ï´Ù. Æеù ºÎºÐ°ü·ÃÇؼ­ ã¾Æº¸°í NoPadding À¸·Î ÁöÁ¤Çß´õ´Ï ¿À·ù´Â Àâ¾Ò½À´Ï´Ù.

ÀÎÄÚµùÀ̶û c ¿¡¼­ unsigned ·Î ¹Þ´Â ºÎºÐ ÀÚ¹Ù¿¡¼­ byte·Î Ç¥ÇöÇÒ¶§ À¯ÀÇÇؼ­ ÇÏ¸é ½½½½ Ç®¸±°Í °°½À´Ï´Ù.

°¨»çÇÕ´Ï´Ù~!
´ñ±ÛÀ» ÀÛ¼ºÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.
(±ÇÇÑÀÌ ¾ø´Â ȸ¿ø·¹º§)
¸ñ·ÏÀ¸·Î
¡â ÀÌÀü±Û: Base64 encode, decode Áú¹® µå¸³´Ï´Ù. [6]
¡ä ´ÙÀ½±Û: ¾¾¾ð¾î Á¼¹äÀÌ Áú¹®Á»¿ä¤Ì¤Ì [12]
ÀÌ¿ë¾à°ü | ±¤°í/Á¦ÈÞ | °³ÀÎÁ¤º¸Ãë±Þ¹æħ | ¹®ÀÇ/½Å°í | ¸ð¹ÙÀÏ TE31 | ¼­¹ö ºÎÇÏ : 17.5%
½Ç½Ã°£ Issue Ä¿¹Â´ÏƼ TE31 [¾ËÁö·Õ] ¨Ï 2002-2024
TOP arrow_upward