프로그래밍/JAVA

AES 암호화

chance 2014. 3. 27. 01:17

키생성

// 128, 196, 256 등 비트수에 맞게 패스워드 키 정의

String keyString = "1234567890123456";

SecretKeySpec key = new SecretKeySpec( keyString.getBytes(), "AES");



운용모드 ( 상세한 설명은 요기로 : http://blog.kangwoo.kr/13 )

ECB : 일정한 블록을 동일한 키로 암호화

CBC : 이전 암호블록과 현재 블록을 XOR, 첫 블록은 이전블록이 없으므로 IV와 XOR.

PCBC : 이전 원본 블록과 현재 블록을 XOR, 첫 블록은 CBC와 동일.

CFB : IV를 암호화한뒤 원본 블록과 XOR하고, XOR된 블록이 다음 블록으로 전달.

OFB : IV가 암호화되어 블록과 XOR하고, 암호화된 IV값만 다음 블록으로 전달되어 다시 암호화.

CTR : IV와 카운터 값을 사용해 암호화하고 블록을 XOR한값. 각 블록은 카운터만 변경됨.


String iv = "1234567890123456";

IvParameterSpec param = new IvParameterSpec( iv.getBytes() );


암호

byte[] buffer = 내 데이터;

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding" );

cipher.init( Cipher.ENCRYPT_MODE, key, param );

byte[] encripted = cipher.doFinal( buffer );


복호

cipher.init( Cipher.DECRYPT_MODE, key, param );

byte[] decripted = cipher.doFinal( encripted );