현재 위치: > 최신 기사 목록> 암호를 생성 할 때 Crypt () 최상의 보안 구성

암호를 생성 할 때 Crypt () 최상의 보안 구성

M66 2025-06-05

PHP에서 Crypt () 함수는 기존의 강력한 암호 암호화 도구입니다. 사용자 비밀번호를 저장 및 검증하는 데 적합한 다양한 암호화 알고리즘 (예 : DES, MD5, Blowfish, SHA-256, SHA-512 등)을 기반으로 한 암호 해싱을 구현합니다. 이 기사는 Crypt () 함수를 사용하여보다 안전한 비밀번호를 생성하고 최고의 보안 구성을 공유하여 암호의 강도를 높이는 방법을 심층적으로 소개합니다.

1. 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 $ + 소금)

2. 강한 소금과 적절한 알고리즘을 사용하는 것이 왜 중요합니까?

비밀번호 스토리지의 보안은 알고리즘 자체뿐만 아니라 소금의 강도와 알고리즘의 복잡성에 따라 다릅니다.

  • 소금 기능 : 무지개 테이블 공격을 방지하고 매번 동일한 암호가 다르게 암호화되도록합니다.

  • 알고리즘 강도 : 더 복잡한 알고리즘과 더 높은 컴퓨팅 비용 (작업 계수)은 무차별 균열에 저항 할 수 있습니다.

3. Crypt ()를 사용하여보다 안전한 비밀번호를 생성하는 예

다음 예제는 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는 성능 및 안전 균형을 맞추기 위해 권장되는 값입니다.

4. 비밀번호 확인 예제

암호를 확인할 때는 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 "오류 비밀번호!";
}
?>

5. 비밀번호 강도 향상을위한 모범 사례

  • 강력한 무작위 소금 사용 : 고정 또는 예측 가능한 소금을 사용하지 마십시오.

  • 올바른 알고리즘을 선택하십시오 : 우선 순위 Blowfish ( $ 2y $ ), SHA-256 ( $ 5 $ ) 또는 SHA-512 ( $ 6 $ ).

  • 비용 매개 변수 조정 : 비용이 높을수록 계산에 시간이 많이 걸리지 만 보안이 강해집니다. 합리적인 균형.

  • 비밀번호 시도 제한 : 무차별 대입을 방지합니다.

  • 암호 복잡성 전략과 결합 : 강제 비밀번호 길이 및 문자 다양성.

  • 알고리즘 및 비용 매개 변수를 정기적으로 업데이트하십시오 . 컴퓨팅 전력이 증가함에 따라 안전 표준은 적시에 업그레이드됩니다.


6. 추가 자원