MySQL AES_ENCRYPT, AES_DECRYPT시 한글깨짐 문제

-- MySQL 2012. 10. 31. 13:13
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
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는 물론 웹페이지에서도 제대로 표시되었다.

'-- MySQL' 카테고리의 다른 글

MySQL DB Backup and Restore  (0) 2013.04.11
MySQL에서 쿼리 시 트랜잭션 처리  (0) 2013.04.11
반드시 알아야 할 MySQL 특징 세 가지  (0) 2012.09.24
DBA에게 유용한 Toad의 숨은 기능 찾기  (0) 2012.09.06
MySQL 튜닝  (0) 2012.08.30
posted by 어린왕자악꿍