소프트웨어/java암호화
[암호화] 대칭 암호화 - 기본암호화 / Blowfish를 이용한 암호화
sinpk
2013. 9. 6. 11:31
1 애플리케이션
가) 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"); |