mysql 암호화 관련 예제입니다.
기존의 고객정보를 암호화 하는 작업을 적어 보겠습니다.
제가 작업한 정보는 다음과 같습니다.
암호화 방식 : AES (대칭키 : 256bin (32bytes), IV : 128bit (16bytes)
모드 : CBC
패딩 : PKCS5 / PKCS7
* CBC모드(Cipher Block Chaining mode) - 암호문 블록을 체인처럼 연결시키기 때문에 붙여진 이름
- 1개의 앞의 암호문 블록과 평문 블록의 내용을 뒤 섞은 다음 암호화 진행
- 1단계 앞에 수행된 결과로 출력된 암호문에 평문 블록을 XOR하여 암호화 진행
- 생성된 각각의 암호블록은 현재의 평문 블록뿐만 아니라 그 이전의 평문 블록들의 영향도 받게됨
* 블록암호 운영모드에서 최초의 평문 블록을 암호화할 때 '1단계 앞의 암호문 블록'이 존재하지 않으므로 '1단계 앞의 암호문 블록'을 대신할 비트열 블록을 준비하는 것 - 초기화 벡터 (IV : Initialization Vector )
@var : 암호화, 복호화 대상
@secret_key : 암호화 키
@iv : 초기화 백타
set @@session.block_encryption_mode='aes-256-cbc'; #암호화 select to_base64(aes_decrypt(@var, from_base64(@secret_key), from_base64(@iv))) from table; 예제) 이메일을 암호화 (업데이트) update user set email = to_base64(AES_ENCRYPT(email, from_base64(@secret_key), from_base64(@iv))) where id = '1'; # 복호화 select aes_decrypt(from_base64(@var), from_base64(@secret_key), from_base64(@iv)) from table; |
저는 workbench에서 암호화 한 컬럼을 복호화 할때 컬럼값이 BLOB라고 출력되어 확인이 불가 하였습니다.
확인을 해 보니 workbench에서 옵션을 체크하여 정상적으로 값을 확인 할 수 있습니다.
Edit > Preferences > SQL Execution
(체크) Treat Treat BINARY/VARBINARY as nonbinary character string.
또는
cast() 함수를 사용하시면 됩니다.
select cast(aes_decrypt(from_base64(email), from_base64(@secret_key), from_base64(@iv)) as char) from user; |
참고: http://lvsin.tistory.com/441, https://stackoverflow.com/questions/11224149/how-to-see-the-oiginal-data-via-decrypt-in-mysql
mysql 다중 테이블 업데이트 (join 업데이트) (0) | 2017.07.25 |
---|---|
mysql auto_increment 생성 및 초기화 (0) | 2017.07.21 |
[mysql] 인덱스 생성, 삭제, 확인 (0) | 2017.06.20 |
mysql sum case group by (0) | 2017.05.23 |
mysql 인덱스 생성, 조회, 삭제 (0) | 2017.03.30 |
댓글 영역