티스토리 뷰
출처 : 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); |
'program' 카테고리의 다른 글
Hudson CI(지속적 통합) 서버로 PHP 개발 환경 구축해보기 (0) | 2014.12.22 |
---|---|
java AES256 암호화 복호화 소스 (0) | 2014.12.08 |
[오라클] GRANT , 오라클 권한 부여의 모든 것 (0) | 2014.10.27 |
ORA-08002: sequence is not yet defined in this session. (0) | 2014.10.24 |
오라클 sequence 정보 (0) | 2014.10.23 |