현재 위치: > 최신 기사 목록> password_verify ()와 함께 crypt ()를 사용해도 괜찮습니까?

password_verify ()와 함께 crypt ()를 사용해도 괜찮습니까?

M66 2025-06-06

PHP에서 암호 해싱 및 확인을 수행 할 때 Crypt ()Password_Verify () 는 자주 언급 된 기능입니다. 모두 암호 보안 처리를 포함하지만 다르게 사용되며 다른 목적으로 설계됩니다. 따라서 개발자는 다음과 같이 묻습니다.

1. crypt () 함수의 개요

crypt ()는 초기에 비밀번호를 암호화하는 데 PHP에서 사용되는 기능입니다. 다음과 같은 다양한 알고리즘을 지원합니다.

  • DES (기본값)

  • MD5 ( $ 1 $ 로 시작)

  • Blowfish ( $ 2A $ , $ 2Y $ 등으로 시작)

  • SHA-256, SHA-512 ( $ 5 $ , $ 6 $ 로 시작)

일반적인 crypt () 사용은 다음과 같습니다.

 $password = 'mySecret';
$salt = '$2y$10$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
$hash = crypt($password, $salt);

2. password_verify () 의 원리

Password_Verify () 는 PHP 5.5에서 소개 된 함수이며 Password_Hash ()를 사용하여 생성 된 해시를 검증하기 위해 특별히 설계되었습니다. 해싱이 사용하는 알고리즘 (예 : BCrypt, Argon2)을 자동으로 식별하고 입력 된 일반 텍스트 비밀번호에 따라 비교합니다.

 if (password_verify('mySecret', $hashFromDatabase)) {
    echo '올바른 비밀번호';
}

3. crypt ()password_verify ()가 조합하여 사용됩니까?

짧은 대답 : 권장하지 않으며 의미가 없습니다.

password_verify ()가 실제로 crypt () 와 유사한 기본 메커니즘을 호출하고 있지만 "가정용"함수 password_hash () 에 의해 생성 된 해시 형식 만 지원합니다. crypt ()를 사용하여 해시를 사용자 정의한 다음 Appartment_Verify ()를 사용하여 확인하면 다음과 같은 문제가 발생합니다.

  • 해시 형식이 Password_verify () 기대치를 충족하지 않으면 False를 반환합니다.

  • PHP는 미래 버전에서 crypt () 에 의해 생성 된 비표준 형식의 해시에 대한 지원을 보장하지 않습니다.

  • password_verify ()는 잘못된 형식의 해시에 대해 전혀 구문 분석되지 않을 수 있으므로 항상 확인이 실패합니다.

다시 말해, 두 사람은 관련이 있지만 상호 운용 가능한 기능 쌍은 아닙니다.

4. 안전 비교

crypt () 사용 위험 :

  • 오류가 발생하기 쉬운 소금 값 및 알고리즘 선택을 수동으로 관리합니다.

  • 부적절하게 사용하는 경우 (기본 DES 알고리즘 또는 약한 소금 값을 사용하는 것과 같은), 당신은 무차별 균열이 발생하기 쉽습니다.

  • 자동 업데이트 알고리즘에 대한 메커니즘이 없습니다.

  • 미래의 호환성은 보장 할 수 없습니다.

password_hash ()password_verify ()를 사용하는 장점 :

  • 보안 기본 알고리즘 (예 : BCrypt)을 자동으로 선택합니다.

  • 소금 값을 자동으로 생성합니다.

  • 알고리즘은 잘 캡슐화되어 있으며 개발자는 기본 구현에 신경을 줄 필요가 없습니다.

  • 스무딩 알고리즘은 password_needs_rehash () 를 통해 업그레이드 할 수 있습니다.

  • 안전은 현대 표준에 의해 검토됩니다.

5. 권장 관행

더 나은 보안 및 향후 호환성을 위해서는 항상 password_verify ()를 사용하여 Appartment_hash () 를 사용하는 것이 좋습니다 .

 // 비밀번호를 등록하거나 수정할 때
$hash = password_hash('mySecret', PASSWORD_DEFAULT);

// 로그인시 확인하십시오
if (password_verify('mySecret', $hash)) {
    // 확인이 성공적입니다
}

기존 시스템에서 crypt ()를 사용하는 경우 사용자 로그인이 성공한 후에 해시를 재생하고 데이터베이스의 값을 업데이트하는 후에 암호 _HASH ()를 사용하는 것이 좋습니다. 이 접근법은 점차 안전한 암호화 방법으로 점차 부드럽게 전환 될 수 있습니다.

6. 결론

Crypt () 는 PHP의 베테랑이지만 비밀번호 처리 분야에서보다 현대적이고 안전한 Password_hash ()Password_verify () 로 점차 대체되었습니다. crypt ()password_verify ()를 조합하여 사용하면 예상되는 보안 개선이 발생하지 않지만 비 호환성으로 인해 검증 실패 및 기타 문제가 발생할 수 있습니다. 따라서 모범 사례는 PHP가 제공하는 Password_Series 함수를 사용하여 사용자 비밀번호를 처리하여 시스템의 보안 및 유지 관리를 보장하는 것입니다 .

추가 보안 조치를 위해 Argon2 알고리즘을 조합하여 사용할 수 있습니다.