상세 컨텐츠

본문 제목

mysql 암호화 (aes_decrypt)

DB/MySql

by husks 2017. 7. 3. 14:38

본문

반응형


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/441https://stackoverflow.com/questions/11224149/how-to-see-the-oiginal-data-via-decrypt-in-mysql


반응형

관련글 더보기

댓글 영역