제임스딘딘의
Tech & Life

개발자의 기록 노트/데이터베이스

[mysql] 암/복호화

제임스-딘딘 2011. 4. 16. 03:25

Oracle을 사용하던 사람들이 MySQL을 사용할 때 착각하기 쉬운 것 중 하나가
바로 DECODE 일 것이다.

내 블로그에 있는 http://blackbull.tistory.com/10
글을 보면, Oracle에서 사용하던 DECODE 에 대해 설명하고 있으니 그것은 별도로 참고하고,

오늘은 MySQL만을 살펴보도록 하자.

MySQL 툴이나, 기타 SQL관련 프로그램을 사용하다보면,
MySQL에서 DECODE의 글씨 색이 다른 것을 볼 수 있으며,
이미 예약어로 잡혀있는 것을 볼 수 있을 것이다.

즉, MySQL도 DECODE가 존재 한다는 것인데,
웃기게도 이것 때문에 Oracle의 DECODE와 혼동하는 사람들을 매번 낚고 있다 --;;


[MySQL에서 help를 이용하여 DECODE에 대해 알아본 결과]
************************************************************************************************
mysql> help decode
Name: 'DECODE'
Description:
Syntax:
DECODE(crypt_str,pass_str)

Decrypts the encrypted string crypt_str using pass_str as the password
crypt_str should be a string returned from ENCODE().

URL: http://dev.mysql.com/doc/refman/5.0/en/encryption-functions.html
************************************************************************************************

[DECODE, ENCODE 사용방법]
DECODE(암호화 할 대상 문자열, 암호화 용도로 사용되는 패스워드 키)
ENCODE(암호화 할 대상 문자열, 암호화 용도로 사용되는 패스워드 키)

[DECODE, ENCODE 설명]
MySQL에서의 DECODE는,
ENCODE 로 encryptioin 된 문자열을 역으로 바꿀 때 사용하는 함수이다.


바꿔 말하자면,
ENCODE 된 문자열이 존재해야 DECODE를 사용할 수 있다는 의미이다.

가령,
CREATE TABLE test (
  str blob
)ENGINE=INNODB DEFAULT CHARSET=UTF8;


이라고 테이블을 생성하고,
encryption된 값을 대입해 보자.

단, 여기서 주의할 점은 문자열이 encryption될 경우,
어떤 문자가 올지 모르기 때문에,
반드시 blob과 같은 binary형태의 자료형을 선언해 두어야 한다는 것이다.
만약 문자열이라고 char, varchar, text 등으로 자료형을 선언한다면,
warning 메세지를 받게 되며, 데이터가 입력되지 않게 된다.

아무튼,
INSERT test (str) VALUES (ENCODE('My Love Is Forever', 'Love'));
라고 입력 후

SELECT str FROM test;
해보자.

결과는?
*************************************************************************
jw
tj"R
*************************************************************************
라고 나온다.

즉, 'My Love Is Forever' 라는 문자열이, 특정한 알고리즘을 이용하여,
'Love' 라는 키워드를 이용하여 위의 결과와 같은 암호화된 결과를 만들어 낸 것이다.

그렇다면, 만약 이것을 정상적으로 보고자 한다면?

SELECT DECODE(str, 'Love') FROM test;
라고 해보자.

결과는?
*************************************************************************
My Love Is Forever
*************************************************************************
라고 나온다.


[결론]
자!!!
이것이 바로 MySQL의 DECODE인 것이다!!!!!!

그러니 앞으로 Oracle의 DECODE와 햇갈리는 사태를 벌이지 말도록 하자~


'개발자의 기록 노트 > 데이터베이스' 카테고리의 다른 글

[mysql] Data Type  (0) 2014.05.04