IT

     애플리케이션

가)    javax.crypto.Cipher : 암호화하고 복호화하는 기본적인 엔진

     getInstance()

       - Cipher.getInstance(“DESede/ECB/PKCS5Padding”);

       - 알고리즘의 이름을 매개변수로 해서 팩토리 메소드 이용

     Init() : Cipher의 인스턴스를 얻었다면 init()로 초기화해야 함

       - cipher.init(Cipher.ENCRYPTODE, myKey);

       - ENCRYPTODE / DECRYPT_MODE : 작동 방식

       - 비대칭 암호화에서 사용

     update() :

     doFinal() : 암호화된 바이트 배열

       - byte[] ciphertext = cipher.doFinal();

 

나)    javax.crypto.KeyGenerator : 대칭 암호화에 쓸 키를 생성

     getInstance()

       - KeyGenerator.getInstance(“DESede”);

     Init() : KeyGenerator의 인스턴스를 초기화할 때 키의 크기를 결정

       - keyGenerator.init(168);

     generateKey() : Key 객체를 실제로 만들어 냄

       - Key key = keyGenerator.generateKey();

 

다)    간단한 암호화 예제 : DESede

 import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;

public class SimpleExample {

 /**
  * @param args
  */
 public static void main(String[] args) {
  System.out.println("Generating a DESede TripleDES key...");
  
  try {
   KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
   keyGenerator.init(168);
   Key key = keyGenerator.generateKey();
   
   System.out.println("Done generating the key.");
   
   Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
   cipher.init(Cipher.ENCRYPT_MODE, key);
   
   byte[] plaintext = "love is love.".getBytes("UTF8");
   
   System.out.println("Plaintext: ");
   for(int i = 0; i < plaintext.length; i++)
    System.out.print(plaintext[i] + " ");
   
   byte[] ciphertext = cipher.doFinal(plaintext);

   System.out.println("\nCiphertext: ");
   for(int i = 0; i < ciphertext.length; i++)
    System.out.print(ciphertext[i] + " ");
   
   cipher.init(Cipher.DECRYPT_MODE, key);
   
   byte[] decryptedText = cipher.doFinal(ciphertext);
   System.out.println("\nDecrypted text: " + new String(decryptedText, "UTF8"));
   
   
  } catch (NoSuchAlgorithmException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NoSuchPaddingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InvalidKeyException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalBlockSizeException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (BadPaddingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

}

 

 

라)    간단한 암호화 예제 : Blowfish : DESede 예제에서 2군데만 달라진다.

 KeyGenerator keyGenerator = KeyGenerator.getInstance("Blowfish");

Cipher cipher = Cipher.getInstance("Blowfish /ECB/PKCS5Padding");

 

 

Posted by sinpk