Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 해시된 비밀번호 저장에 적합한 데이터 유형은 무엇일까?

해시 비밀번호 데이터 유형의 기본 원리

MySQL에서 해시된 비밀번호를 저장할 때 적합한 데이터 유형은 사용하는 해싱 알고리즘의 종류에 따라 달라집니다. 해싱 알고리즘은 입력값의 크기와 무관하게 항상 동일한 길이의 결과를 생성하므로, 원본 비밀번호의 길이는 데이터 유형 선택에 영향을 주지 않습니다.

해시 결과는 일련의 16진수(hexadecimal) 문자열로 출력되며, UNHEX() 함수를 활용하면 이 16진수 문자열을 절반 길이의 바이너리(binary) 값으로 변환하여 더 효율적으로 저장할 수 있습니다.

대표적인 해싱 알고리즘별 권장 데이터 유형은 다음과 같습니다.

  • MD5 − CHAR(32) 또는 BINARY(16)
  • SHA-1 − CHAR(40) 또는 BINARY(20)

MD5 예제

다음은 MD5 함수로 문자열을 해싱하는 예제입니다.

mysql> select MD5('This is a hashed password');

실행 결과는 다음과 같습니다.

+----------------------------------+
| MD5('This is a hashed password') |
+----------------------------------+
| e9d4c42db40abbb4724a0047f7e91e67 |
+----------------------------------+
1 row in set (0.03 sec)

해시된 비밀번호의 길이를 확인하려면 CHARACTER_LENGTH() 함수를 사용합니다.

mysql> SELECT CHARACTER_LENGTH(MD5('This is a hashed password'));
+----------------------------------------------------+
| CHARACTER_LENGTH(MD5('This is a hashed password')) |
+----------------------------------------------------+
| 32 |
+----------------------------------------------------+
1 row in set (0.04 sec)

결과 길이가 정확히 32자이므로 CHAR(32) 타입에 저장할 수 있으며, UNHEX()로 변환하면 16바이트이므로 BINARY(16)에도 저장 가능합니다.

SHA-1 예제

다음은 SHA1 함수를 사용하는 예제입니다.

mysql> select SHA1('This is a hashed password');

실행 결과는 다음과 같습니다.

+------------------------------------------+
| SHA1('This is a hashed password') |
+------------------------------------------+
| 4e2e1a39dba84a0b5a91043bb0e4dbef23970837 |
+------------------------------------------+
1 row in set (0.00 sec)

마찬가지로 CHARACTER_LENGTH() 함수로 길이를 확인할 수 있습니다.

mysql> SELECT CHARACTER_LENGTH(SHA1('This is a hashed password'));
+-----------------------------------------------------+
| CHARACTER_LENGTH(SHA1('This is a hashed password')) |
+-----------------------------------------------------+
| 40 |
+-----------------------------------------------------+
1 row in set (0.00 sec)

SHA-1의 결과는 40자이므로 CHAR(40)에 저장되며, UNHEX() 변환 시 20바이트가 되어 BINARY(20)에 저장할 수 있습니다.

참고: 보안 관점의 권장 사항

MD5와 SHA-1은 학습용이나 체크섬 용도로는 유용하지만, 충돌 공격에 취약하여 실제 서비스의 비밀번호 저장에는 권장되지 않습니다. 실무 환경에서는 bcrypt, scrypt, Argon2 같은 솔트(salt) 기반의 전용 비밀번호 해싱 알고리즘을 사용하는 것이 안전합니다.