MySQL AES_ENCRYPT, AES_DECRYPT시 한글깨짐 문제 -- MySQL




JSP에서 MySQL의 암호화된 값을 복호화해서 가져올 때 영문이나 숫자는 제대로 복호화 되어 표시되지만, 한글이 포함된 경우 문자열이 깨져서 나오는 경우가 발생했다.

INSERT INTO temp (username) VALUES (HEX(AES_ENCRYPT('한글', 'key')));

위의 쿼리를 이용하여 temp테이블에 암호화된 값을 저장했다면, 웹페이지에서 아래의 쿼리를 이용해 값을 불러와 웹페이지 내에 값을 표시하려고 한다.

SELECT AES_DECRYPT(UNHEX(username), 'key') FROM temp;

해당 쿼리를 toad에서 실행하면, 제대로 '한글'이라고 복호화되어 표시하지만, 웹페이지 (본인의 경우 JSP)에서 해당 쿼리를 실행하면 값이 깨져서 나타난다.

고민하여 해결한 방법은 아래와 같다.

SELECT CAST(AES_DECRYPT(UNHEX(username), 'key') AS CHAR) FROM temp;

AES_DECRYPT한 결과가 toad에서 제대로 '한글'로 표시되어 스트링으로 생각했는데, bytes로 결과를 리턴하는 것으로 보이며 이 점을 착안하여 문자열로 변환하니 toad는 물론 웹페이지에서도 제대로 표시되었다.

덧글

  • 돈킹 2016/01/08 13:07 # 삭제 답글

    좋은정보 감사합니다.
  • 지나가다 2020/10/23 10:04 # 삭제 답글

    잘 보고 갑니다. 감사합니다.
댓글 입력 영역