IT 성장일기

[MySQL] MySQL, Maria DB에서 컬럼 암, 복호화 하기 본문

Database/MySQL(Maria DB)

[MySQL] MySQL, Maria DB에서 컬럼 암, 복호화 하기

고 양 2024. 11. 4. 20:05
반응형
MySQL, Maria DB에서 컬럼 암, 복호화 하기

얼마 전 운영 중인 서비스 상에서 이벤트를 위한 작은 프로젝트 하나를 담당할 기회가 있었습니다.

프로젝트를 진행하던 중 Maria DB에서 자체적으로 제공하는 암, 복호화 기능을 사용하게 되어 정리해보고자 합니다.

 

암호화 알고리즘은 AES 대칭키 방식을 따르고 있습니다.

따라서 암, 복호화에 사용되는 키를 꼭 준비해야 합니다.

간단 함수 설명

HEX : 숫자 또는 이진 문자열을 16진수로 변환함

UNHEX : 16진수 문자열을 다시 숫자 또는 이진 문자열로 변환함

AES_ENCRYPT : 문자열을 AES 알고리즘을 사용해 이진 문자열로 암호화함

AES_DECRYPT : 이진 문자열을 평문으로 복호화함

암호화하기

아래와 같이 평문과 키를 이용해 암호화할 수 있습니다.

아래 쿼리는 문자열을 바이너리로 암호화하고 그 결과를 16진수로 변환해서 반환해줍니다.

SELECT
   HEX(AES_ENCRYPT('NOT_ENCODED_WORDS','secret_key')) AS 'ENCODED'

 

대박🫢

복호화도 해보겠습니다.

복호화하기

조립은 해체의 역순이죠.

암호화 때엔 암호화 > 16진수 변환의 순서를 거쳤으니 거꾸로 2진수 변환 > 복호화의 순서로 실행해야 합니다.

SELECT 
    AES_DECRYPT(UNHEX('9FE260C607EC53A3FD728D36B453D375B7173609A462A3412688B9D35AA0F4B6'), 'secret_key') AS 'DECODED'

미쳤다🫨

진짜 너무 신기합니다.

마치며

Maria DB가 제공하는 암호화 과정을 다시 한 번 되짚으면서 마무리해보겠습니다.

암호화 : 키를 이용하여 평문 암호화 > 2진 문자열 > 16진수 문자열

복호화 : 16진수 문자열 > 2진 문자열 > 키를 이용하여 평문으로 복호화

 

앞으로 암호화 모듈 따로 만들기 귀찮거나 시간이 촉박할 때 유용하게 써먹기로 했습니다.

감사합니다.

반응형