PHP에서 Crypt () 함수는 기존의 강력한 암호 암호화 도구입니다. 사용자 비밀번호를 저장 및 검증하는 데 적합한 다양한 암호화 알고리즘 (예 : DES, MD5, Blowfish, SHA-256, SHA-512 등)을 기반으로 한 암호 해싱을 구현합니다. 이 기사는 Crypt () 함수를 사용하여보다 안전한 비밀번호를 생성하고 최고의 보안 구성을 공유하여 암호의 강도를 높이는 방법을 심층적으로 소개합니다.
crypt () 함수의 기본 사용은 다음과 같습니다.
$hashed_password = crypt($password, $salt);
$ 암호는 사용자가 입력 한 원래 비밀번호입니다.
$ 소금은 암호화 방법 및 결과를 제어하는 데 사용되는 소금 값으로 해싱 알고리즘과 결과 형식을 결정합니다.
소금 값 형식은 비밀번호의 보안에 직접적인 영향을 미칩니다. crypt () 가 지원하는 소금 값 형식에는 다음이 포함됩니다.
DES (기본값, 소금 길이는 2 자, 약한 보안)
MD5 (소금 형식 : $ 1 $ + 8 문자 소금)
Blowfish (소금 형식 : $ 2A $ 또는 $ 2Y $ + 2 자리 비용 + 22-character salt)
SHA-256 (소금 형식 : $ 5 $ + 소금)
SHA-512 (소금 형식 : $ 6 $ + 소금)
비밀번호 스토리지의 보안은 알고리즘 자체뿐만 아니라 소금의 강도와 알고리즘의 복잡성에 따라 다릅니다.
소금 기능 : 무지개 테이블 공격을 방지하고 매번 동일한 암호가 다르게 암호화되도록합니다.
알고리즘 강도 : 더 복잡한 알고리즘과 더 높은 컴퓨팅 비용 (작업 계수)은 무차별 균열에 저항 할 수 있습니다.
다음 예제는 Blowfish 알고리즘 ( $ 2y $ )과 함께 Crypt ()를 사용하여보다 안전한 비밀번호를 생성하는 방법을 보여줍니다.
<?php
function generateSecureHash($password) {
// 생성하다22비트 안전한 임의의 소금
$salt = substr(str_replace('+', '.', base64_encode(random_bytes(16))), 0, 22);
// Blowfish알고리즘의 비용 매개 변수,범위는 일반적으로입니다04~31,기본12더 안전합니다
$cost = '12';
// 소금 끈을 구성합니다,형식은입니다 $2y$비용$소금
$blowfish_salt = sprintf('$2y$%02d$%s', $cost, $salt);
// 생성하다암호화 된 암호 해시
return crypt($password, $blowfish_salt);
}
// 시험
$password = "MyS3cureP@ss!";
$hash = generateSecureHash($password);
echo "암호화 된 암호 해시: " . $hash;
?>
Random_bytes ()를 사용하여 고강도 랜덤 염을 생성하십시오.
$ 2y $는 보안 비밀번호 저장에 적합한 Blowfish 알고리즘을 나타내는 데 사용됩니다.
비용 매개 변수 $ 비용은 알고리즘의 복잡성을 결정합니다. 비용이 높을수록 안전하지만 계산 시간이 길수록 더 길다. 12는 성능 및 안전 균형을 맞추기 위해 권장되는 값입니다.
암호를 확인할 때는 Crypt () 함수를 사용하여 데이터베이스에 저장된 해시를 사용하여 사용자가 입력 한 비밀번호를 다시 암호화하여 결과가 동일한 지 비교하십시오.
<?php
function verifyPassword($password, $stored_hash) {
// 사용存储的哈希中的소금重新加密密码
$hash = crypt($password, $stored_hash);
// 사용hash_equals시간 공격 보안 비교 방지
return hash_equals($hash, $stored_hash);
}
// 시험验证
$input_password = "MyS3cureP@ss!";
if (verifyPassword($input_password, $hash)) {
echo "비밀번호 확인이 성공했습니다!";
} else {
echo "오류 비밀번호!";
}
?>
강력한 무작위 소금 사용 : 고정 또는 예측 가능한 소금을 사용하지 마십시오.
올바른 알고리즘을 선택하십시오 : 우선 순위 Blowfish ( $ 2y $ ), SHA-256 ( $ 5 $ ) 또는 SHA-512 ( $ 6 $ ).
비용 매개 변수 조정 : 비용이 높을수록 계산에 시간이 많이 걸리지 만 보안이 강해집니다. 합리적인 균형.
비밀번호 시도 제한 : 무차별 대입을 방지합니다.
암호 복잡성 전략과 결합 : 강제 비밀번호 길이 및 문자 다양성.
알고리즘 및 비용 매개 변수를 정기적으로 업데이트하십시오 . 컴퓨팅 전력이 증가함에 따라 안전 표준은 적시에 업그레이드됩니다.
PHP 공식 문서 : https://www.m66.net/manual/zh/function.crypt.php