Java에서 AES 128 로 암호화한걸 MySQL 쿼리로 조회해야한다던지
DB 기존 데이터를 암호화 마이그레이션을 진행하기 위해 MySQL과 Java의 암/복호화가 필요합니다.
삽질끝에 ...
MySQL은 AES 128bit만 적용이 가능합니다.
그리고 암호화모드는 ECB만 가능하며 CBC는 적용할 수 없습니다.
(추가로 알아보니.!!! MySQL 5.5까지만 디폴드.. 5.6부터는 암호화 방식이 변경 가능합니다!)
- MySQL 5.6부터는 block_encryption_mode 변수 값을 통해 암호화 방식을 변경할 수 있습니다.
https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_block_encryption_mode
Java에서 AES/CBC/PKCS5Padding 으로 암/복호화 할려고 구현했는데 MySQL과 동기화가 필요했기 때문에 ...
어쩔수 없이 AES 기본 값으로 변경해야 가능합니다.
MySQL도 암호화 로직 순서대로 동일하게 구현하였습니다.
http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_from-base64
- 대칭키도 byte로 받다보니 자바에서 hex시킨 대칭키 문자열을 다시 unhex해서 넣었습니다. (unhex 부분은 키 값이 hex가 아니라면 쓰지 않으면 됩니다)
DB 기존 데이터를 암호화 마이그레이션을 진행하기 위해 MySQL과 Java의 암/복호화가 필요합니다.
삽질끝에 ...
MySQL은 AES 128bit만 적용이 가능합니다.
그리고 암호화모드는 ECB만 가능하며 CBC는 적용할 수 없습니다.
(추가로 알아보니.!!! MySQL 5.5까지만 디폴드.. 5.6부터는 암호화 방식이 변경 가능합니다!)
- MySQL 5.6부터는 block_encryption_mode 변수 값을 통해 암호화 방식을 변경할 수 있습니다.
https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_block_encryption_mode
Java에서 AES/CBC/PKCS5Padding 으로 암/복호화 할려고 구현했는데 MySQL과 동기화가 필요했기 때문에 ...
어쩔수 없이 AES 기본 값으로 변경해야 가능합니다.
AES/CBC/PKCS5Padding 를 AES/ECB/PKCS5Padding 로 변경하니 성공..Java AES + CBC 암호화 샘플 코드 ECB로 바꾸는 자바 샘플은 위 링크에서 IV Parameter를 제거하고 모드만 바꾸면 끝납니다.
MySQL 암호/복호화 테스트
UPDATE Foo Set Bar = TO_BASE64((AES_ENCRYPT(Bar, unhex('hex대칭키')))) WHERE Bar = 'hello'; SELECT (AES_DECRYPT(FROM_BASE64(Bar), unhex('hex대칭키'))) FROM Foo WHERE Bar = 'hello';- 다른 샘플들을 살펴보면 데이터에 hex를 썻는데 저는 자바코드에서 aes후 base 64를 쓰기 때문에
MySQL도 암호화 로직 순서대로 동일하게 구현하였습니다.
http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_from-base64
- 대칭키도 byte로 받다보니 자바에서 hex시킨 대칭키 문자열을 다시 unhex해서 넣었습니다. (unhex 부분은 키 값이 hex가 아니라면 쓰지 않으면 됩니다)
'Java' 카테고리의 다른 글
모델 클래스에 인터페이스 구현 설계에 대한 내용 (0) | 2016.08.24 |
---|---|
package javax.crypto does not exist (0) | 2016.08.17 |
AES 암호화/복호화 (0) | 2016.08.02 |
Bit 연산 (0) | 2016.03.21 |
[Jar] jar 파일 내부 리스트 보기 (0) | 2016.01.29 |