Shinnara's Blog
Talking with Shinnara :: NaraTalk.com

'Encryption'에 해당되는 글 1건

  1. 2007/09/17 Triple DES 를 이용하여 암호화 해보자

Triple DES 는 DES 알고리즘을 세번 적용한 것으로 DES 알고리즘에 비해 보안성이 뛰어납니다. Java 에서는 기본적(1.4부터인가요?)으로 Triple DES 를 지원하고 있습니다. 여기서는 Triple DES 를 이용하여 암호화 하고 복호화 하는 방법에 대해 간략히 알아보고자 합니다.

암호화의 방법에는 크게 대칭키 방식과 비대칭키 방식이 있음을 알고 계실 것입니다. 오늘 보고자하는 Triple DES 는 대칭키 방식으로 암호화할 때나 복호화할 때 모두 같은 키를 사용하는 방법입니다. 따라서 키를 생성해야 하는데, 키를 생성하는 방법은 다음과 같습니다.

        KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
        keyGenerator.init(168);  
        Key key = keyGenerator.generateKey();


KeyGenerator 는 javax.crypto 패키지 안에 있습니다.  init(168)은 168bit 의 크기를 갖는 키를 생성하겠다는 의미이며, 112 를 사용할 수 도 있습니다. 이 때 만들어지는 키의 내용을 확인해 보려면 다음과 같은 코드를 사용할 수 있습니다.

        for (int i = 0; i < key.getEncoded().length ; i++)    {
            System.out.print((key.getEncoded())[i] + " ");
        }


키의 크기를 168로 할 경우, 위의 코드는 24개의 값을 보여주게 됩니다.

키가 만들어 졌으니 이 키를 이용해서 암호화를 수행해야 합니다.


       
        Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key);


Cipher 를 통해 암호화/복호화를 수행할 수 있으며 DESede/ECB/PKCS5Padding 은 각각 algorithm/mode/padding 을 의미합니다.  init()를 통해 동작 형태를 지정할 수 있으며, 위의 코드는 암호화를 의미합니다.

실제 암호화는 doFinal() 메소드를 통해서 수행하게 됩니다.

       
        byte[] plainText = "Welcome to Shinnara's World".getBytes("UTF8");
        byte [] cipherText = cipher.doFinal(plainText);


다음 코드를 통해 암호화된 내용을 확인해 보실 수 있습니다.


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


이제 암호화된 내용을 다시 복호화하는 방법입니다. 키의 내용이 byte[] encodedkey 로 전달되었다고 가정합니다.


       
SecretKeyFactory sfk = SecretKeyFactory.getInstance("DESede");
        SecretKey sk = sfk.generateSecret(new DESedeKeySpec( encodedkey));



복호화 모드로 Cipher 를 만듭니다.

     
cipher.init(Cipher.DECRYPT_MODE, sk);


복호화 하는 것 역시 doFinal 메소드를 사용합니다.

     
byte [] decryptedText = cipher.doFinal(cipherText);


내용을 확인해보면, 암호화 하기 전의 내용이 제대로 표현되었음을 알 수 있습니다.

너무 쉽죠? ^^







0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/142 관련글 쓰기

댓글을 달아 주세요

1 
다...... (264)
Computer/Programming (106)
Links (14)
책 읽는 즐거움 (7)
끄적임 (66)
즐거운 과학 나라 (7)
일본 (5)
Study (4)