PHP에서 Crypt () 함수는 지정된 "소금"을 사용하여 암호의 보안을 향상시키는 일반적으로 사용되는 비밀번호 해싱 도구입니다. 소금의 기능은 해싱의 무작위성을 높이고 무지개 테이블 공격을 방지하는 것입니다. crypt () 함수에 의해 생성 된 해시에서 소금을 추출하고 검증하는 방법을 이해하는 것은 암호 처리 보안을 마스터하는 데 중요한 부분입니다.
이 기사는 PHP의 substr () 함수를 사용하여 Crypt () 의 반환 값에서 소금 부분을 추출하는 방법을 소개하고 간단한 검증을 수행합니다.
소금은 암호화시 원래 암호와 결합 된 임의의 문자열입니다. 두 사용자의 암호가 동일하더라도 생성 된 해시 값이 다릅니다.
crypt () 함수에서, 소금의 형식과 길이는 암호화 알고리즘에 따라 다릅니다.
DES : 소금 2 자
MD5 : $ 1 $ 로 시작하고 최대 8 자까지의 소금으로 시작하십시오.
Blowfish : $ 2A $ 또는 $ 2Y $ 로 시작하고 2 자리 비용 요인과 22 자 Salt로 시작합니다.
MD5 알고리즘을 사용하고 있다고 가정하면 소금 형식은 다음과 같습니다.
$1$ + 8캐릭터 소금
예를 들어, 일반적인 MD5 해시 값 :
$hash = crypt('password', '$1$abcdefgh$');
반환 된 해시는 다음과 같습니다.
$1$abcdefgh$ZxR0LnxZPbQ5Cj7JlYiGp0
소금은 처음 12 자입니다 : $ 1 $ abcdefgh $
<?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 ()를 사용하여 해시에서 염 부분을 쉽게 추출하십시오.
정규 표현식으로 소금 형식을 확인하면 소금이 암호화 알고리즘의 요구 사항을 충족하고 보안을 향상시킬 수 있습니다.