암호화 및 해싱 함수

함수 설명
AES_ENCRYPT(값, encrypt key) AES 알고리즘을 사용해 값을 암호화
AES_DECRYPT(해시값, key) AES 알고리즘으로 암호화 된 값을 복호화
MD5(값) MD5 알고리즘으로 해싱
SHA1(값) SHA1 알고리즘으로 해싱
SHA2(값, hash_length) SHA2 알고리즘으로 해싱
PASSWORD(값) MySQL 비밀번호 해싱
ENCRYPT(값, salt) DES 알고리즘으로 해싱


AES_ENCRYPT

AES 알고리즘을 사용해 값을 암호화하는 암호화 함수입니다. encrypt key에 따라 반환값이 다릅니다.
복호화 할 때 동일한 암호화 키를 통해 복호화하는 양방향 암호화입니다.

1
2
3
4
5
SELECT (HEX(AES_ENCRYPT('my_password','encryption_key')));
-- >> A6A9215E95AFFEE453711ADA178DF662

SELECT (HEX(AES_ENCRYPT('my_password','another_key')));
-- >> 19E5CBCA6DCF9A61EB5D08568668E48D


AES_DECRYPT

AES 알고리즘으로 암호화 한 값을 복호화 하는 함수입니다.
암호화 할 때 사용한 암호화 key 를 넣어줘야 제대로된 복호화가 가능합니다.

1
2
3
4
5
SELECT AES_DECRYPT(UNHEX(
	'A6A9215E95AFFEE453711ADA178DF662'),
	'encryption_key'
	)
-- >> my_password

맞지 않는 암호화 key를 넣으면 제대로 복호화되지 않습니다.

1
2
3
4
5
SELECT AES_DECRYPT(UNHEX(
	'A6A9215E95AFFEE453711ADA178DF662'),
	'another_key'
	)
-- >> NULL


MD5

MD5 알고리즘으로 해싱한 값을 반환합니다.

1
2
SELECT MD5('my_password');
-- >> a865a7e0ddbf35fa6f6a232e0893bea4


SHA1

SHA1 알고리즘으로 해싱한 값을 반환합니다.

1
2
SELECT SHA1('my_password');
-- >> 5eb942810a75ebc850972a89285d570d484c89c4


SHA2

SHA2 알고리즘으로 해싱한 값을 반환합니다.
반환할 해시값 길이를 지정할 수 있습니다. (256비트, 512비트 등)

1
2
3
4
SELECT SHA2('my_password', 256);
-- >> f6e248ea994f3e342f61141b8b8e3ede86d4de53257abc8d06ae07a1da73fb39
SELECT SHA2('my_password', 512);
-- >> dda8c3468860dcb24e228ab8ee44208d43eb2f5fd2a3a538bafbd39db4ff114c9829a64bd1a4710e0c021f8a4134b6a2f8b17eccc87ffe79d8459e2df294fb01

salt 를 적용하려면 아래와 같이 사용할 수 있습니다.

1
2
SELECT SHA2(CONCAT('my_password','salt'), 256);
-- >> ee912d8d77e0dd6d9c58af1efc5514df5ce4d031caed3641c4524dd772b4c5c9


PASSWORD

MySQL 내부의 특정 알고리즘을 기반으로 해싱한 값을 반환합니다.

1
2
SELECT PASSWORD('my_password');
-- >> *CCD3A959D6A004B9C3807B728BC2E55B67E10518


ENCRYPT

DES 알고리즘을 기반으로 해싱한 값을 반환합니다.
salt를 추가할 수도 있습니다.
(salt에 대한 설명 : https://whdrns2013.github.io/computerscience/20231231_005_hash/)

1
2
3
4
SELECT ENCRYPT('my_password', 'the salt');
-- >> thh38EQpCLgcQ
SELECT ENCRYPT('my_password', 'whale');
-- >> wh934d0GgLzCI

또한 salt를 지정하지 않을 경우, MySQL에서 임의의 salt를 적용합니다.
이 때문에 slat를 지정하지 않고 동일한 값을 넣고 함수를 실행해도 반환값이 달라집니다.

1
2
3
4
SELECT ENCRYPT('my_password');
-- >> u3IH3kSHSaRWI
SELECT ENCRYPT('my_password');
-- >> i5.vTKYQRygg6


Reference

AES_ENCRYPT 함수 : https://blog.naver.com/deersoul6662/222377000254

Categories:

Updated: