현재 위치: > 최신 기사 목록> substr ()를 사용하여 php의 crypt () 함수에서 소금 부분을 추출하고 확인하는 방법?

substr ()를 사용하여 php의 crypt () 함수에서 소금 부분을 추출하고 확인하는 방법?

M66 2025-07-20

PHP에서 Crypt () 함수는 지정된 "소금"을 사용하여 암호의 보안을 향상시키는 일반적으로 사용되는 비밀번호 해싱 도구입니다. 소금의 기능은 해싱의 무작위성을 높이고 무지개 테이블 공격을 방지하는 것입니다. crypt () 함수에 의해 생성 된 해시에서 소금을 추출하고 검증하는 방법을 이해하는 것은 암호 처리 보안을 마스터하는 데 중요한 부분입니다.

이 기사는 PHP의 substr () 함수를 사용하여 Crypt () 의 반환 값에서 소금 부분을 추출하는 방법을 소개하고 간단한 검증을 수행합니다.

소금이란 무엇입니까?

소금은 암호화시 원래 암호와 결합 된 임의의 문자열입니다. 두 사용자의 암호가 동일하더라도 생성 된 해시 값이 다릅니다.

crypt () 함수에서, 소금의 형식과 길이는 암호화 알고리즘에 따라 다릅니다.

  • DES : 소금 2 자

  • MD5 : $ 1 $ 로 시작하고 최대 8 자까지의 소금으로 시작하십시오.

  • Blowfish : $ 2A $ 또는 $ 2Y $ 로 시작하고 2 자리 비용 요인과 22 자 Salt로 시작합니다.

substr ()로 소금을 추출하는 방법

MD5 알고리즘을 사용하고 있다고 가정하면 소금 형식은 다음과 같습니다.

 $1$ + 8캐릭터 소금

예를 들어, 일반적인 MD5 해시 값 :

 $hash = crypt('password', '$1$abcdefgh$');

반환 된 해시는 다음과 같습니다.

 $1$abcdefgh$ZxR0LnxZPbQ5Cj7JlYiGp0

소금은 처음 12 자입니다 : $ 1 $ abcdefgh $

substr ()로 소금 샘플 코드 추출

 <?php
$hash = crypt('password', '$1$abcdefgh$');

// 추출 된 소금의 길이는 다음과 같습니다12캐릭터
$salt = substr($hash, 0, 12);

echo "추출 된 소금은입니다: " . $salt;
?>

소금이 예상 형식을 충족하는지 확인하십시오

추출 된 소금이 정규 표현을 통해 기대치를 충족하는지 확인할 수 있습니다. 예를 들어, MD5 소금의 정규 발현 :

 /^(\$1\$[\.\/0-9a-zA-Z]{1,8}\$)$/

샘플 코드 :

 <?php
$salt = substr($hash, 0, 12);

if (preg_match('/^\$1\$[\.\/0-9a-zA-Z]{1,8}\$/', $salt)) {
    echo "올바른 소금 형식";
} else {
    echo "잘못된 소금 형식";
}
?>

포괄적 인 예

다음은 해시 생성, 소금 추출 및 소금 검증을 포함하는 완전한 예입니다.

 <?php
$password = 'mypassword';

// 사용 MD5 알고리즘은 소금을 생성합니다($1$ + 8임의의 문자 + $)
$salt = '$1$' . substr(strtr(base64_encode(random_bytes(6)), '+', '.'), 0, 8) . '$';

// 해시를 생성하십시오
$hash = crypt($password, $salt);

echo "생성 된 해시: $hash\n";

// 해시에서 소금을 추출하십시오
$extracted_salt = substr($hash, 0, 12);

echo "추출 된 소금: $extracted_salt\n";

// 소금 형식을 확인하십시오
if (preg_match('/^\$1\$[\.\/0-9a-zA-Z]{1,8}\$/', $extracted_salt)) {
    echo "소금 형식 검증이 통과되었습니다\n";
} else {
    echo "소금 형식 검증에 실패했습니다\n";
}
?>

요약

  • crypt () 함수의 염 형식은 길이와 구조가 다른 암호화 알고리즘과 관련이 있습니다.

  • substr ()를 사용하여 해시에서 염 부분을 쉽게 추출하십시오.

  • 정규 표현식으로 소금 형식을 확인하면 소금이 암호화 알고리즘의 요구 사항을 충족하고 보안을 향상시킬 수 있습니다.