티스토리 뷰

program

java AES 128

littlecarbb 2014. 12. 8. 12:19

출처 : http://samse.tistory.com/297

 

자바개발자라면 누구나 알고 있겠지만.. 막상 외워서 할 수 있는 사람은 몇명 없을듯…
나중에 필요하면 찾아쓰기위해 아래와 같이 정리해둠.

1
2
3
4
KeyGenerator generator = KeyGenerator.getInstance("AES");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
generator.init(128, random);
Key secureKey = generator.generateKey();

SecureRandom 을 이용하는 이유는 Random이란게 원래 추측이 가능하기 때문에 추측이 불가능하게 하기 위한 Random발생모듈.
PRNG (Pseudo-Random Number Generator) 라고도 함.
위의 방법은 임의의 공통키를 생성해주므로 매번 키가 바뀐다.
패스워드방식으로 공통키를 생성하게 되면 같은 패스워드를 사용하면 같은 공통키를 얻을 수 있다.
방법은 아래와 같이….

1
2
3
PBEKeySpec keySpec = new PBEKeySpec( "패스워드".toCharArray() );
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBE");
Key secureKey = keyFactory.generateSecret( keySpec );

하지만 위 방법은 AES암호에서는 적용되지 않는다.
AES의 키는 128bit, 192bit, 256bit 여야 하므로 패스워드의 길이제한이 있다.
아래 패스워드의 설정은 영문자 16문자로 설정할 경우 128bit의 키가 된다.

1
Key secureKey = new SecretKeySpec("패스워드".getBytes(), "AES");

공통키 secureKey 를 생성했다면..
아래와 같이 암호화할 수 있다.

1
2
3
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secureKey);
byte[] encryptedData = cipher.doFinal("암호화할 평문".getBytes());

복호는 아래와 같이 한다.

1
2
3
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secureKey);
byte[] plainText = cipher.doFinal(encryptedData);
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함