티스토리 뷰

반응형

 mysql에서 제공하는 함수

 

암호화 & 인코딩

#암호화
AES_ENCRYPT({암호화 할 값},{암호화 키})

#인코딩
TO_BASE64(AES_ENCRYPT({암호화 할 값},{암호화 키}))  #BASE64로 인코딩
HEX(AES_ENCRYPT({암호화 할 값},{암호화 키})) #hexadecimal string으로 인코딩

#EXAMPLE
UPDATE MEMBER
   SET MEM_NAME_ENC = TO_BASE64(AES_ENCRYPT(MEM_NAME,'testkey123'));

 

복호화 & 디코딩

#디코딩
FROM_BASE64({암호화된 값})
HEX({암호화된 값})

#복호화
AES_DECRYPT(FROM_BASE64({암호화된 값}), {암호화 키}) # 암호화 할 때 사용했던 키 사용

#EXAMPLE
SELECT CAST(AES_DECRYPT(FROM_BASE64(MEM_NAME_ENC), 'testkey123') AS CHAR(50)) AS MEM_NAME
  FROM MEMBER;

SELECT CONVERT(AES_DECRYPT(FROM_BASE64(MEM_NAME_ENC), 'testkey123') using UTF-8) AS MEM_NAME
  FROM MEMBER;

 

예시

## 1. hex 테스트 - 숫자
SELECT HEX(AES_ENCRYPT(123,'testkey123')) AS '암호화';
# 8DA6C1BCE3FC76CE3BA5DCF2AE0C6C71

SELECT AES_DECRYPT(unhex('8DA6C1BCE3FC76CE3BA5DCF2AE0C6C71'), 'testkey123') as '복호화';
# 123


## 2. hex 테스트 - 문자열
SELECT HEX(AES_ENCRYPT('abc-가나다','testkey123')) AS '암호화';
# 34B7FC91EA42901201A23730EDA93B8E

# 한글을 포함하는 문자열은 추가적인 변환 작업이 필요하다.
SELECT CONVERT(AES_DECRYPT(UNHEX('34B7FC91EA42901201A23730EDA93B8E'), 'testkey123') USING UTF8) AS '복호화';
SELECT CAST(AES_DECRYPT(UNHEX('34B7FC91EA42901201A23730EDA93B8E'), 'testkey123') AS CHAR(50)) AS '복호화';
# abc-가나다


## 3. BASE64 테스트 - 숫자
SELECT TO_BASE64(AES_ENCRYPT(123,'testkey123')) AS '암호화';
# jabBvOP8ds47pdzyrgxscQ==

SELECT AES_DECRYPT(FROM_BASE64('jabBvOP8ds47pdzyrgxscQ=='), 'testkey123') AS '복호화';
# 123


## 4. BASE64 테스트 - 문자열
SELECT TO_BASE64(AES_ENCRYPT('abc-가나다','testkey123')) AS '암호화';
# NLf8kepCkBIBojcw7ak7jg==

# 한글을 포함하는 문자열은 추가적인 변환 작업이 필요하다. 
SELECT CONVERT(AES_DECRYPT(FROM_BASE64('NLf8kepCkBIBojcw7ak7jg=='), 'testkey123') USING UTF8) AS '복호화';
# abc-가나다


# 5. table 조회 예시
SELECT AES_DECRYPT(FROM_BASE64(MEM_BIRTHDAY_ENC), 'testkey123') AS '생년월일'
     , CONVERT(AES_DECRYPT(FROM_BASE64(MEM_NAME_ENC), 'testkey123') USING UTF8) AS '이름1'
     , CAST(AES_DECRYPT(FROM_BASE64(MEM_ADDRESS_ENC), 'testkey123') AS CHAR(50) ) AS '이름21'
  FROM MEMBER;
반응형
반응형
최근에 올라온 글
Total
Today
Yesterday
글 보관함