Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


´ëĪ¾Ïȣȭ¾Ë°í¸®Áò ¼Ò°³ ¹× DES, Blowfish»ùÇÃÄÚµå
 
´ëĪ¾Ïȣȭ¾Ë°í¸®ÁòÀÌ ¹«¾ùÀÎÁö °£·«È÷ ¼Ò°³ÇÏ°í, JCA-JCE¹× °£´ÜÇÑ µÎ°¡Áö ¾Ë°í¸®ÁòÀ» ȹµæÇÏ¿© ¾Ïȣȭ ÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇÏ°íÀÚ ÇÑ´Ù. ( 2003/06/23 ) 241
Written by ienvyou - ÃÖÁö¿õ
1 of 1
 


¿À·§¸¸ÀÌ ¾²´Â ¾ÆƼŬÀÎ°Í °°´Ù. ¿©±â¼­´Â ¿ì¼± ¸Àº¸±â·Î °£´ÜÇÏ°Ô ¾Ïȣȭ¿¡ ´ëÇÑ ³»¿ë ¹×
´ëĪ¾ÏÈ£¹æ¹ý¿¡ ´ëÇÑ ³»¿ëÀ» ¼³¸íÇϵµ·Ï ÇÏ°Ú´Ù.

¿äÁò °°ÀÌ ÀÎÅͳÝÀÌ º¸ÆíÈ­µÇ°í °³¹æÇü ½Ã½ºÅÛµéÀÌ Á¸ÀçÇÏ°Ô µÇ¸é¼­ °³ÀÎÀÇ Á¤º¸¹×
ºñ¹Ð¿¡ ´ëÇÑ Á¤º¸º¸È£°¡ ±²ÀåÇÑ À̽´·Î ´ëµÎµÇ¾îÁö°í ÀÖ´Ù.

¿ì¸®°¡ »ç¿ëÇÏ°Ô µÇ´Â ÀÚ¹Ù´Â java.security¹× javax.cryptoÆÐÅ°Áö¸¦ ÅëÇÏ¿© ¾ÏÈ£¸¦ ½±°Ô
»ç¿ëÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. 
¸¸¾à ´ç½ÅÀÌ ¾î¶°ÇÑ µ¥ÀÌÅ͸¦ ´Ù¸¥ »ç¶÷¿¡°Ô Àü´ÞÇÏ´ø µµÁß ±× ¸Þ½ÃÁö¸¦ ´Ù¸¥ »ç¶÷ÀÌ º¸°Ô
µÈ´Ù¸é? ±×°Ô ¸¸¾à ½Å¿ëÄ«µå³ª °áÁ¦Á¤º¸, Áß¿äÇÑ ¹®¼­Àϼöµµ ÀÖ´Â °ÍÀÌ´Ù.
±×·¯ÇÑ °Íµé¿¡ ´ëÇÑ Ä§ÀÔÀ§ÇèÀ¸·ÎºÎÅÍ Á¤º¸°¡ º¸È£µÇ¾îÁö±â À§Çؼ­´Â ¹«¾ð°¡ÀÇ ¼ö´ÜÀÌ
ÇÊ¿äÇÏ°Ô µÉ°ÍÀÌ´Ù. ÀÚ¹ÙÃø¿¡¼­µµ ÄÚµåÁ¤Ã¥¿¡ ´ëÇÑ º¸¾ÈÀÌ ÇÊ¿äÇÏ°ÚÁö¸¸ ¿ì¼±Àº
±âº»ÀûÀÎ »çÇ׸¸À» ¿©±â¼­ ³íÇÏ°Ú´Ù.

±âº»ÀûÀÎ ÀÚ¹ÙÀÇ Äڵ庸¾ÈÁ¤Ã¥À¸·Î¼­ final class¶óµçÁö, ÆÐÅ°Áöº¸¾È, jarÆÄÀÏ sign, 
serializationºÎºÐÀÇ transientµî¿¡ ´ëÇÑ ¼³¸íÀº ¿©±â¼­ ³íÀÇÇÏÁö ¾Êµµ·Ï ÇÏ°Ú´Ù.

¢º ´ëĪ¾Ïȣȭ ¾Ë°í¸®Áò

±âº»ÀûÀ¸·Î ÀÌ ±ÛÀ» Àд »ç¶÷À̶ó¸é Çб³´Ù´Ò¶§ ÇѹøÂëÀº Ä£ÇÑ Ä£±¸¿ÍÀÇ ÀÇ»ç¼ÒÅëÀ̳ª
´ëÈ­¸¦ Çϴµ¥¿¡ À־ ³²µéÀÌ ¾ËÁö ¸øÇÏ´Â ¹æ¹ýÀ¸·Î ´ëÈ­¸¦ ÇÏ°í ½Í¾ú´ø ÀûÀÌ ÀÖÀ»°ÍÀÌ´Ù.
(³î»õ~¸¸ ±×·¨³ª?) 
°¡·É ³»°¡ °íµîÇб³¸¦ ´Ù´Ò¶§ Ä£±¸¿Í À̾߱⸦ ÇÒ¶§ ¸ðµç ´Ü¾î¸¦ Ç¥ÇöÇÏ°íÀÚ ÇÒ¶§
Áß¼ºÀ» µÚ·Î »©¼­ ±×°ÍÀ» ÀÌ¿ëÇÏ¿© ÇѱÛÀÚ¸¦ ´õ ¸¸µé°í °Å±â¿¡ ¤µ¹ÞħÀ» ÀÌ¿ëÇÏ¿© ÀÇ»ç¼ÒÅëÀ»
ÇÑÀûµµ ÀÖ¾ú´Ù. (¿¹: ºñµÑ±â --> ºñ½Ã µÎ¼ú ±â½Ã) 󷳸»ÀÌ´Ù..

À§ÀÇ ¿¹¸¦ µç°Íµµ ÀÏÁ¾ÀÇ ¾ÏȣȭÀÇ ÇÑ ¹æ¹ýÀ̶ó°í ÇÒ ¼ö Àִµ¥ ÀÏ¹Ý »ç¶÷µéÀÌ µè±â¿¡´Â
¾î¶°ÇÑ ³í¸®¿¡ ÀÇÇÏ¿© ¸»À» ÇÏ´Â °ÍÀÎÁö óÀ½¿¡´Â ¾Ë¾ÆµèÁö¸¦ ¸øÇÏ´Ù°¡ ´Ü¾î¸¦ Àû¾îÁְųª
ÇÑÂüÈÄ¿¡¾ß ±×·¯ÇÑ ¿ø¸®°¡ ÀÖ¾úÀ½À» ¾Ë°Ô µÈ´Ù.

À§¿Í °°ÀÌ ¾Ïȣȭ¿Í °°Àº Á¤º¸¸¦ ÀÌ¿ëÇÏ¿© ´Ù½Ã º¹È£È­ ÇÒ¼ö ÀÖ´Â µ¥ Á» ´õ ½±°Ô ¿¹¸¦ µé¾îº¸ÀÚ¸é
´ÙÀ½°ú °°À» ¼ö ÀÖ´Ù.


A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|                               
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C 

°¢°¢ÀÇ ¹®ÀÚ¸¦ 3ÀÚ¸®¾¿ µÚ·Î ¿Å°ÜÁø °Í ó·³ º¸¿©Áú ¼ö Àִµ¥  ¸¸¾à HI, CAROUSER¶ó´Â ´Ü¾î´Â
KL, FDURXVIU ¶ó´Â ´Ü¾î·Î ¹Ù²î°Ô µÇ¸é °°Àº ÆÐÅÏ¿¡ ÀÇÇÏ¿© ´Ù½Ã º¹È£È­ µÇ¾îÁú¼ö ÀÖ´Â 
Ư¡À» °¡Áö°í ÀÖ´Ù.
Áï ¸Þ½ÃÁö¸¦ ¾Ïȣȭ¿Í º¹È£È­¸¦ Çϱâ À§Çؼ­´Â ¾Ë°í¸®Áò°ú Å°°¡ Á¤ÀǵǾî¾ß ÇÑ´Ù.

¢º ´ëĪ¾Ïȣȭ ¾Ë°í¸®ÁòÀÇ Á¾·ù
  1. DES & TripleDES : DES(Data Encryption Standard)´Â "Lucifer"¶ó´Â À̸§ÀÇ IBM¿¡¼­ ÃÖÃÊ°³¹ßµÇ¾ú´Ù. ¶ÇÇÑ ¹Ì±¹¿¡¼­ ÃÖÃÊ ±¹°¡Ç¥ÁØÀÌ µÇ¾úÀ¸¸ç, 56ºñƮ۸¦ °¡Áö°í ¾Ïº¹È£È­¸¦ »ç¿ëÇß´Ù. ÇÏÁö¸¸ ÄÄÇ»ÅÍ°¡ ¹ßÀüÀ» ÇÔ¿¡ À־ 56ºñƮŰÀÇ °æ¿ì ¾î´ÀÁ¤µµÀÇ ½Ã°£¸¸ È®º¸°¡ µÈ´Ù¸é Ç®¾î³¾¼ö Àֱ⠶§¹®¿¡ Á»´õ ¿Ïº®ÇÑ º¸¾ÈÀ» À§ÇÏ¿© Triple DES°¡ °í¾ÈµÇ¾îÁ³´Ù.
  2. TripleDES : ÀÌ´Â ±âÁ¸ÀÇ DES¾Ïȣȭ ¾Ë°í¸®Áò¹æ½ÄÀ» ´Ù¸¥Å°¿¡ ¼¼¹ø Àû¿ë½ÃŲ°ÍÀ̸ç, ù¹ø° ¾Ïȣȭ°úÁ¤, µÎ¹ø° º¹È£È­°úÁ¤, ¼¼¹ø°´Â ¶Ç ´Ù¸¥ ¾Ïȣȭ °úÁ¤À» °ÅÄ¡µµ·Ï ÇÏ°í ÀÖ´Ù. ±×·¡¼­ À̸§ÀÌ DESede(DES encryption, decryption, encryption)ÀÌ µÇ¾úÀ¸¸ç, °¢°¢ÀÇ °úÁ¤¿¡ µû¶ó 56ºñÆ®ÀÇ ¹è¼ö·Î ¾Ïȣȭ º¹Àâµµ°¡ Áõ°¡µÇ°Ô µÇ¾îÀÖ´Ù.
  3. Blowfish : 1993³â Bruce Schneier¿¡ ÀÇÇØ °í¾ÈµÈ ºí·Ï¾ÏÈ£·Î¼­ DESº¸´Ù ºü¸£°í ¾ÈÀüÇÑ ±â¹ýÀ» Á¦°øÇÑ´Ù. ÃÖ´ë Å°ÀÇ ºñÆ®¼ö¸¦ 448ºñÆ®±îÁö È®ÀåÇÒ¼öÀִٴ Ư¡À» °¡Áö°í ÀÖ´Ù.
  4. RC4 : "Civest's Code 4"¸¦ ÀǹÌÇϸç 1987³â RSA Data Security¿¡¼­ ¹ßÇ¥µÇ¾ú´Ù. º¸Åë À̱â¹ýÀ¸·Î TCP/IP¿¬°áÀ» ¾ÈÀüÇÏ°Ô ÇÏ´Â SSLÀ» ±¸ÇöÇÏ´Â µ¥ ¸¹ÀÌ ¾²ÀδÙ(Å°ÀÇ ±æÀÌ 40ºñÆ® ¶Ç´Â 128ºñÆ®)
À§°ú °°ÀÌ ´ëĪ¾ÏȣȭÀÇ °æ¿ì´Â ¸ðµç ¾Ë°í¸®ÁòÀÌ °°Àº ¹æ½ÄÀ¸·Î µ¿ÀÛÀ» ÇÏ°Ô µÇ´Âµ¥ ¹®Á¦´Â ¸Þ½ÃÁö¸¦ º¸³»°í ¹Þ´Â »ç¶÷ÀÌ °°Àº Å°¸¦ °¡Áö°Ô µÇ¸ç, Áß°£¿¡ ±× Å°°¡ ³ëÃâÀÌ µÇ¾úÀ» ¶© ÀÌ¹Ì ¿ì¸®ÀÇ ¸Þ½ÃÁö´Â ³²¿¡°Ô ÀÐÈú¼ö ÀÖ´Â ¹®Á¦Á¡À» °¡Áö°í µÈ´Ù. Áï ºñ¹ÐÅ°°¡ ³ëÃâµÇ°Ô µÇ¸é ¾ÏȣȭµÈ ¸Þ½ÃÁö¶ÇÇÑ µ¿½Ã¿¡ ³ëÃâµÉ ¼ö ÀÖ´Ù´Â ´ÜÁ¡À» °¡Áö°í ÀÖ´Ù. ¢º DES¹æ½ÄÀÇ »ùÇÃÄÚµå ¿ì¸®´Â ¿©±â¼­ °£´ÜÇÏ°Ô DES¹æ½ÄÀ» ÀÌ¿ëÇÏ¿© ¾Ïº¹È£È­ ÇÁ·Î±×·¥À» Çϳª ¿¹Á¦·Î º¸µµ·Ï ÇÑ´Ù. ±âº»ÀûÀ¸·Î ÀÚ¹ÙÃø¿¡¼­ Á¦°øÇÒ¼ö ÀÖ´Â ¾ÏÈ£¿¡ °ü·ÃµÈ ÆÐÅ°Áö´Â JCA(java cryptograhpy arch.)¿Í JCE(java cryptography extension)À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. JCA´Â ±âº»ÀûÀ¸·Î Java2 Runtime EnvironmentÀÇ ÀϺÎÀ̸ç, JCA´Â ±×°ÍÀÇ È®ÀåÆÐÅ°ÁöÀÌ´Ù. ±âº»ÀûÀÎ JCA¿¡¼­´Â ÀüÀÚ¼­¸í, ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®, Å°»ý¼º±âµîÀÇ Å¬·¡½º¸¦ °¡Áö°í ÀÖÀ¸¸ç ±×·¯ÇÑ ±âº»ÀûÀΠŬ·¡½ºµéÀ» ¿ì¸®°¡ »ç¿ëÇÏ°íÀÚ ÇßÀ» ¶§ new¿¡ ÀÇÇÑ »ý¼ºÀÌ ¾Æ´Ï¶ó ÀÌ¹Ì ¾ÆÅ°ÅØÃÄ°¡ °¡Áö°í ÀÖ´Â ¾Ïȣȭ ±â¹ý¿¡ ÀÇÇÏ¿© factoryÇüÅÂÀÇ Å¬·¡½º¿¡°Ô »ý¼ºÀ» ¿äûÇÏ¿©¾ß ÇÑ´Ù. ±âº»ÀûÀÎJCE°°Àº °æ¿ì ´ç½ÅÀÌ JDK1.3.1À» »ç¿ëÇÑ´Ù¸é ÆÐÅ°Áö¸¦ ½ã¿¡¼­ ´Ù¿î·Îµå ¹ÞÀ»¼öÀÖÀ¸¸ç jdk1.4¹öÁ¯À» »ç¿ëÇÑ´Ù¸é ÀÌ¹Ì Æ÷ÇԵǾîÁ® ÀÖÀ¸´Ï ±×³É ÄÚµùÀ» Çصµ ¹«¹æÇÒ µí ÇÏ´Ù. ¿ì¼± ¾Æ·¡ÀÇ Äڵ带 º¸±â Àü¿¡ Áß¿äÇÑ Å¬·¡½º¸¦ »ìÆ캸¾Æ¾ß ÇÒ ÇÊ¿ä°¡ Àִµ¥ ±×°ÍÀº ¹Ù·Î javax.crypto.Cipher¶ó´Â Ŭ·¡½º·Î¼­ µ¥ÀÌÅ͸¦ ¾ÏȣȭÇÏ°í º¹È£È­Çϴµ¥ »ç¿ëµÇ´Â ±âº»ÀûÀÎ ¿£ÁøºÎºÐÀÌ´Ù. ¸î°¡ÁöÀÇ ¸Þ¼Òµå¸¸À» »ìÆ캸°Ú´Âµ¥ ¿ì¼± getIntance(), init(), update(), doFinal()·Î¼­ ¾Ïȣȭ ¾Ë°í¸®ÁòÀÇ »ý¼º, CipherÀνºÅϽºÀÇ ÃʱâÈ­, ¾Ïº¹È£È­, ¾ÏȣȭµÈ ¹è¿­À» ȹµæÀ» ÇÏ´Â ¸Þ¼ÒµåµéÀÌ´Ù. ¶ÇÇÑ javax.crypto.KeyGeneratorŬ·¡½º´Â ¾Ïȣȭ¿Í º¹È£È­¿¡ ÇÊ¿äÇÑ Å°¸¦ »ý¼ºÇس»´Â µ¥ ¾²À̸ç getInstance(), init(), generateKey()ÀÇ ¸Þ¼Òµå Á¤µµ¸é Cipher¿¡ ÇÊ¿äÇÑ Å°¸¦ ¸¸µé¾î³¾ ¼ö ÀÖ´Ù.

import java.security.*;
import javax.crypto.*;

public class SimpleExample {
    public static void main(String [] args) throws Exception {
        if( args.length != 1) {
            System.out.println("Usage : java SimpleExample text ");
            System.exit(1);
        }
        String text = args[0];

        System.out.println("Generating a DESded (TripleDES) key...");

        // Triple DES »ý¼º
        KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
        keyGenerator.init(168);	// Å°ÀÇ Å©±â¸¦ 168ºñÆ®·Î ÃʱâÈ­
        Key key = keyGenerator.generateKey();

        System.out.println("Å°»ý¼ºÀÌ ¿Ï·áµÇ¾úÀ½");

        // Cipher¸¦ »ý¼º, »ç¿ëÇÒ Å°·Î ÃʱâÈ­
        Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key);

        byte [] plainText = text.getBytes("UTF8");

        System.out.println("Plain Text : ");
        for (int i = 0; i < plainText.length ; i++)	{
            System.out.print(plainText[i] + " ");
        }

        // ¾Ïȣȭ ½ÃÀÛ
        byte [] cipherText = cipher.doFinal(plainText);

        // ¾ÏÈ£¹®¼­ Ãâ·Â

        System.out.println("\nCipher Text : ");
        for (int i = 0; i < cipherText.length ; i++)	{
            System.out.print(cipherText[i] + " ");
        }

        //º¹È£È­ ¸ðµå·Î¼­ ´Ù½Ã ÃʱâÈ­
        cipher.init(Cipher.DECRYPT_MODE, key);

        //º¹È£È­ ¼öÇà

        byte [] decryptedText = cipher.doFinal(cipherText);
        String output =  new String(decryptedText, "UTF8");
        System.out.println("\nDecrypted Text : " + output);
    }
};
À§ÀÇ ÄÚµå·Î¼­ °£´ÜÇÏ°Ô »ìÆ캼 ¼ö Àִµ¥, Ãâ·ÂµÇ´Â »ý¼ºµÇ´Â Å°¿¡ µû¶ó °áÁ¤µÇ¹Ç·Î ¸Å¹ø ´Ù¸¥ °á°úÀÇ ¾ÏȣȭµÈ ¹®ÀÚ¿­À» º¼ ¼ö Àִ Ư¡À» °¡Áö°í ÀÖ´Ù. BlowfishÀÇ ´ëĪ¾Ïȣȭ ±â¹ý¶ÇÇÑ °°Àº ¹æ¹ý¿¡ ÀÇÇÏ¿© ¸¸µé¾î³¾ ¼ö Àִµ¥ ´Ü¼øÈ÷ À§ÀÇ ÄÚµå»ó¿¡¼­ÀÇ º¯È­´Â KeyGenerator¿¡¼­ "Blowfish"¿Í Cipher¿¡¼­ ÀνºÅϽº¸¦ ¾ò¾î³¾¶§ ´Ü¼øÈ÷ "Blowfish/ECB/PKCS5Padding"À» ÀÌ¿ëÇÏ¿© ó¸®Çϸé 128ºñÆ®ÀÇ Å°¸¦ ÀÌ¿ëÇÑ ¾Ïº¹È£È­¸¦ Å×½ºÆ®Çغ¼ ¼ö ÀÖ´Ù. ¢º Conclusion ±âº»ÀûÀ¸·Î °¡Àå ±âº»ÀûÀÎ ¾Ïȣȭ ¹æ¹ýÀ» »ìÆ캸¾ÒÀ¸¸ç ±âº»ÀûÀÎ ´ëĪ¾Ë°í¸®ÁòÀÇ °³³äÀÌ ¹«¾ùÀÎÁö¸¸ ¾Ë°í À־ ³î»õ~°¡ ¿©·¯ºÐµéÀ» º¸´Â ±âÁØ¿¡¼­ º° ¹«¸®°¡ ¾ø¾î º¸Àϵí ÇÏ´Ù. ´ÙÀ½¿¡ ¾µ °ÍÀ¸·Î´Â À¯´Ð½º Æнº¿öµåÀÇ ÇüÅ·Π¸¹ÀÌ ¾²ÀÌ´Â ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®¹æ¹ýÀ» °£´ÜÇÑ ÀÚ¹ÙÄÚµùÀ» ÀÌ¿ëÇÏ¿© ó¸®Çغ¸°Ú´Ù. À§ÀÇ °æ¿ì À¥»çÀÌÆ®¸¦ Á÷Á¢ ¸¸µé¾úÀ» °æ¿ì »ç¿ëÀڵ鿡 ´ëÇÑ user id, password¸¦ µ¥ÀÌÅͺ£À̽º¿¡ Á÷Á¢ÀúÀåÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó universal keyÀÇ °³³äÀ¸·Î º¯È¯ÇÏ¿© ó¸®ÇÏ´Â »ùÇÃÀ» º¸µµ·Ï ÇÏ°Ú´Ù..
 
1
References
 
Copyright ¨Ï 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD