>  기사  >  백엔드 개발  >  PHP의 비밀번호_hash() 및 비밀번호_verify() 함수가 다른 결과를 생성하는 이유는 무엇입니까?

PHP의 비밀번호_hash() 및 비밀번호_verify() 함수가 다른 결과를 생성하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-21 07:03:30949검색

Why Do password_hash() and password_verify() Functions in PHP Produce Different Results?

PHP의password_hash()및password_verify()함수에서 비밀번호 확인 불일치

PHP에서password_hash()및password_verify()함수는 다음과 같습니다. 사용자 비밀번호를 안전하게 처리하고 확인하는 데 일반적으로 사용됩니다. 그러나 특정 시나리오에서는 비밀번호 일치에 예상치 못한 불일치가 발생할 수 있습니다.

문제 설명

password_hash()를 사용하여 비밀번호를 암호화하고 비밀번호 확인()을 통해 확인하세요. Password_verify()의 결과가 암호화되지 않은 원래 비밀번호와 일치하지 않는 것을 확인했습니다.

불일치 이해

해싱 알고리즘의 특성으로 인해 불일치가 발생합니다. . 해싱에는 일반 텍스트 입력을 고유하고 예측할 수 없는 고정 길이 출력(해시라고 함)으로 변환하는 작업이 포함됩니다. 이 프로세스는 되돌릴 수 없습니다. 즉, 해시에서 원래 입력을 검색하는 것이 계산상 불가능합니다.

password_hash()를 사용하여 비밀번호를 암호화하면 bcrypt 알고리즘을 사용하여 해시가 생성됩니다. 이 암호화된 해시는 데이터베이스에 저장됩니다. 사용자가 로그인을 시도하면 제공된 비밀번호는 비밀번호_hash()를 사용하여 다시 해시되고 저장된 해시와 비교됩니다.

불일치 해결

올바른 비밀번호를 확인하려면 확인하려면 비밀번호가 처음 해시되었을 때 사용된 것과 동일한 알고리즘과 구성을 사용하는 것이 중요합니다. 취해야 할 단계는 다음과 같습니다.

  1. 알고리즘 및 구성 확인: 등록 및 로그인 스크립트 모두에서 Password_hash()에 사용된 알고리즘이 저장된 비밀번호와 연결된 알고리즘과 일치하는지 확인하세요. 기본적으로 Password_hash()는 bcrypt를 사용하지만 적절한 비용 요소를 제공하여 다른 알고리즘을 지정할 수 있습니다.
<code class="php">$password = password_hash($pwd, PASSWORD_DEFAULT); // Using default bcrypt algorithm</code>
  1. 일관된 해싱 매개변수: 비용 요소 또는 솔트와 같은 해싱 매개변수를 사용자 정의하여 등록 및 로그인 스크립트 모두에서 일관성을 유지하도록 합니다. 이러한 매개변수의 변화로 인해 입력 비밀번호가 동일하더라도 해시가 달라질 수 있습니다.
  2. 보안 비교 사용: 비밀번호를 비교하기 위해 비밀번호 확인()을 사용할 때 동등 비교(== 또는 ===). 대신, 잠재적으로 비밀번호 패턴을 드러낼 수 있는 타이밍 공격을 처리할 수 있으므로 이 목적을 위해 특별히 설계된 Password_verify() 함수를 사용하십시오.
<code class="php">if (password_verify($pwd, $password)) {
    // Password matches
}</code>
  1. 준비된 명령문을 고려하세요. SQL 삽입 공격을 방지하려면 해시된 비밀번호를 검색하기 위해 데이터베이스를 쿼리할 때 준비된 문을 사용하는 것이 좋습니다.

이러한 단계를 수행하면 비밀번호_해시() 및 비밀번호 확인() 기능이 작동하는지 확인할 수 있습니다. 정확하고 안정적이고 안전한 비밀번호 처리 및 검증을 제공합니다.

위 내용은 PHP의 비밀번호_hash() 및 비밀번호_verify() 함수가 다른 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.