MySQL 데이터베이스에 암호 저장

Haider Ali 2024년2월15일
  1. 해싱이란?
  2. MD5 (str)를 사용하여 MySQL에 암호 저장
  3. SHA1 (str)을 사용하여 MySQL에 암호 저장
  4. PASSWORD 기능을 사용하여 MySQL에 암호 저장
  5. ENCRYPT 기능을 사용하여 MySQL에 암호 저장
MySQL 데이터베이스에 암호 저장

MySQL 데이터베이스에 암호를 저장하는 방법을 모른다면 여기가 적합합니다. 이 가이드에서는 MySQL 데이터베이스에 해시 암호를 저장하는 방법, 해시 암호를 저장하는 데 사용되는 다양한 기술 및 특정 방법을 배울 수 있습니다.

해싱이란?

해싱은 주어진 수의 키 또는 문자열을 더 짧은 고정 길이 값으로 변환합니다. 해싱에서 고정된 크기의 데이터는 해시 문자로 변환된 키 또는 문자열이 동일한 크기임을 의미합니다.

해싱의 또 다른 속성은 값이 해시로 변환된 경우 원래 데이터 값을 검색할 방법이 없음을 의미하는 검색 불가능한 프로세스라는 것입니다.

다양한 해싱 기능이 MySQL에서 사용됩니다. 이들은 다음과 같습니다.

  1. MD5 (str)
  2. SHA1 (str)
  3. 비밀번호
  4. 암호화

MD5 (str)를 사용하여 MySQL에 암호 저장

md5는 데이터 128비트 체크섬을 가져와 32개의 16진수 문자열로 반환하는 함수입니다.

먼저 데이터베이스에 clients 테이블을 만들고 varchar 데이터 유형을 사용하여 해당 테이블의 두 필드를 만듭니다.

클라이언트 테이블

몇 가지 값을 삽입하고 md5를 사용하여 해시 암호를 생성합니다.

md5를 사용하여 클라이언트 1에 삽입

md5를 사용하여 클라이언트 2에 삽입

보시다시피 md5 함수는 두 입력 값을 모두 32자리 16진수로 변환했습니다.

이전에 검색할 수 없는 함수라고 말했을 때 의미하는 바를 보여드리겠습니다.

md5를 사용하여 데이터 1 가져오기

md5를 사용하여 데이터 가져오기 2

보시다시피 데이터를 다시 가져오려면 두 값 모두에 대해 md5 함수를 사용해야 했습니다. 그렇지 않으면 오류가 발생했습니다.

SHA1 (str)을 사용하여 MySQL에 암호 저장

sha1은 이전 md5 함수보다 훨씬 더 큰 범위를 갖는 해싱 함수입니다. 데이터 체크섬 160비트를 40개의 16진수 문자열로 변환합니다.

다음은 이해를 돕기 위한 예입니다.

sha1을 사용하여 클라이언트에 삽입

이제 이 두 해싱 함수가 작동하고 어떤 의미에서 서로 다른지에 대해 충분한 아이디어를 얻었을 것입니다. sha1의 또 다른 특징은 훨씬 더 나은 버전을 제공하여 훨씬 더 넓은 범위를 제공한다는 것입니다.

다음과 같습니다.

  1. SHA224 - 데이터 224비트 체크섬을 변환하고 56자리 16진수 문자열을 반환합니다.
  2. SHA256 - 데이터 256비트 체크섬을 변환하고 64자리 16진수 문자열을 반환합니다.
  3. SHA384 - 데이터 384비트 체크섬을 변환하고 96개의 16진수 문자열을 반환합니다.
  4. SHA512 - 데이터 512비트 체크섬을 변환하고 128개의 16진수 문자열을 반환합니다.

PASSWORD 기능을 사용하여 MySQL에 암호 저장

password 기능은 일반 텍스트 암호 문자열을 사용하여 해시된 암호를 생성합니다. password 함수는 NULL 인수의 경우 NULL을 반환합니다.

이해를 돕기 위해 몇 가지 예를 들어보겠습니다.

SELECT
PASSWORD('xyz');

출력:

6gd7gb67shy87865

이제 숫자와 문자가 있는 문자열을 사용해 봅시다.

SELECT
PASSWORD('xyz123');

출력:

54fg56gs32sgi3862

암호 기능과 관련하여 또 다른 중요한 점은 모든 MySQL 버전을 지원하지 않는다는 것입니다. 지원되는 버전은 다음과 같습니다.

  1. MySQL 5.6
  2. MySQL 5.5
  3. MySQL 5.1
  4. MySQL 5.0
  5. MySQL 4.1

ENCRYPT 기능을 사용하여 MySQL에 암호 저장

문자열을 읽기 어려운 이진 데이터로 변환하는 것입니다. 암호화된 데이터는 나중에 쉽게 해독할 수 있습니다.

중요한 참고 사항은 열의 데이터 유형이 BLOB이어야 한다는 것입니다.

암호화에는 두 가지 유형의 기능이 사용됩니다.

  1. AES(Advanced Encryption Standards) - 128비트 키로 인코딩을 보장하는 공식 AES 알고리즘을 사용합니다. aes를 사용한 암호화의 경우 AES_ENCRYPT(str,key_str)를 작성해야 합니다.
  2. DES(데이터 암호화 표준)는 Triple-DES 알고리즘을 사용합니다. 이 암호화의 조건은 MySQL이 SSL 지원으로 구성되어야 한다는 것입니다.

여기서 숙고할 점은 Encrypt 기능이 Unix 운영 체제에서만 사용할 수 있다는 것입니다. 따라서 다른 운영 체제의 경우 AES 또는 DES 암호화를 사용해야 합니다.

이 기술에 익숙해지기 위해 암호화 기능에 대해 자세히 살펴보겠습니다.

encrypt를 사용하여 클라이언트에 삽입

값에 AES_Encryption을 적용한 후 표에서 그 효과를 볼 수 있습니다. 다른 예가 있습니다.

암호화 2를 사용하여 클라이언트에 삽입

값을 검색하려면 올바른 키를 제공해야 합니다. 그렇지 않으면 원하는 데이터를 다시 얻을 수 없습니다.

aes-decrypt

여기에 잘못된 키를 삽입했고 그 결과는 아래와 같습니다.

잘못된 키

여기에서 올바른 키를 사용하여 다른 값을 검색합니다.

오른쪽 키

작가: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn