PHP에서 Crypt () 함수는 일반적으로 사용되는 암호화 기능으로, 특히 암호 저장을 처리 할 때 주로 일회용으로 문자열을 암호화하는 데 사용됩니다. 이 기사는 Crypt () 함수의 매개 변수를 자세히 구문 분석하고 PHP의 Crypt () 함수를 사용하여 문자열을 안전하게 암호화하는 방법을 통해 예제를 보여줍니다.
Crypt () 는 PHP의 내장 암호화 기능이며 Unix의 Crypt () 함수를 기반으로 구현됩니다. 다양한 암호화 알고리즘 (예 : DES, MD5, Blowfish, SHA-256, SHA-512 등)을 사용하여 입력 문자열을 암호화하고 암호화 된 문자열을 반환합니다.
기능 프로토 타입 :
string crypt ( string $str [, string $salt ] )
$ str : 암호화 해야하는 문자열, 일반적으로 비밀번호입니다.
$ salt (선택 사항) : 암호화 알고리즘과 소금에 절인 문자열을 지정하는 데 사용됩니다. 다른 소금은 암호화 알고리즘과 결과를 결정합니다.
이것은 일반적으로 사용자의 암호로 암호화 할 일반 텍스트 문자열입니다.
소금 매개 변수는 암호화 알고리즘과 결과를 결정하는 핵심입니다. 다른 형식의 소금은 다른 알고리즘을 나타냅니다.
기본 DES 암호화 <br> 예를 들어 "AB"와 같은 길이가 2 자의 소금
이것은 보안이 약한 가장 독창적 인 암호화 방법이며 권장되지 않습니다.
MD5 암호화 <br> $ 1 $ 로 시작하고 "$ 1 $ M66Net12 $" 와 같은 최대 8 자 소금이 이어집니다.
이것은 MD5 알고리즘을 사용하여 암호화됩니다.
블로우 피쉬 암호화 <br> $ 2A $ , $ 2Y $ , $ 2B $ 등으로 시작하고, 예를 들어 비용 계수와 22 자리 소금을 나타내는 2 자리 숫자로 시작하십시오 .
Blowfish는 비교적 안전한 알고리즘입니다.
SHA-256 암호화 <br> $ 5 $ 로 시작한 다음 소금으로 시작하십시오. "$ 5 $ M66net $"
SHA-512 암호화 <br> $ 6 $ 로 시작한 다음 Salt : "$ 6 $ M66net $"
// MD5 소금 예
$salt_md5 = '$1$m66net12$';
// Blowfish 소금 예,10 비용 요인입니다(cost factor)
$salt_blowfish = '$2y$10$m66netsaltsaltsaltsa$';
// SHA-256 소금 예
$salt_sha256 = '$5$m66net$';
// SHA-512 소금 예
$salt_sha512 = '$6$m66net$';
다음은 crypt () 함수를 사용하여 문자열을 암호화하는 방법을 보여주는 몇 가지 예입니다.
$password = "mypassword";
$salt = "m6"; // 2캐릭터 소금
$hashed = crypt($password, $salt);
echo "DES암호화 결과:" . $hashed;
$password = "mypassword";
$salt = '$1$m66net12$'; // ~에 의해 $1$ 처음에 소금
$hashed = crypt($password, $salt);
echo "MD5암호화 결과:" . $hashed;
$password = "mypassword";
$salt = '$2y$10$m66netsaltsaltsaltsa$'; // Blowfish,비용10
$hashed = crypt($password, $salt);
echo "Blowfish암호화 결과:" . $hashed;
$password = "mypassword";
$salt = '$6$m66net$';
$hashed = crypt($password, $salt);
echo "SHA-512암호화 결과:" . $hashed;
암호를 암호화 한 후 입력 된 암호를 확인할 때 동일한 소금으로 암호화 한 다음 결과가 동일한 지 비교하십시오.
// 비밀번호 해시가 데이터베이스에 저장되었다고 가정합니다
$stored_hash = '$6$m66net$........'; // 从数据库取出的암호화 결과
// 사용자가 로그인하면 암호가 입력되었습니다
$input_password = "mypassword";
// 소금을 제거하십시오,대개 stored_hash 처음 몇 부분,특정 길이는 알고리즘에 따라 다릅니다
$salt = substr($stored_hash, 0, strrpos($stored_hash, '$') + 1);
// 동일한 소금으로 암호를 다시 밀어 넣습니다
$input_hash = crypt($input_password, $salt);
if ($input_hash === $stored_hash) {
echo "비밀번호 확인이 성공했습니다";
} else {
echo "비밀번호 확인이 실패했습니다";
}
crypt () 함수는 다양한 암호화 알고리즘을 지원하며 소금 매개 변수에 의해 결정됩니다.
Blowfish ( $ 2y $ ) 또는 SHA-512 ( $ 6 $ ) 알고리즘을 사용하는 것이 좋습니다.
소금은 무작위적이고 독특해야하며 올바른 형식이어야합니다.
비밀번호 확인이 암호화 된 해시 값의 소금을 사용하여 암호를 다시 암호화 한 다음 비교하십시오.