>  기사  >  백엔드 개발  >  비밀번호 해시 불일치로 인해 PHP 비밀번호 확인이 실패하는 이유는 무엇입니까?

비밀번호 해시 불일치로 인해 PHP 비밀번호 확인이 실패하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-21 07:04:02663검색

Why does PHP password verification fail with a password hash mismatch?

PHP 비밀번호_hash(), 비밀번호_확인()

등록 스크립트에서 비밀번호 해시()를 사용하여 비밀번호를 올바르게 해시하고 다음 위치에 저장합니다. 데이터베이스. 그러나 로그인 중 비밀번호 확인()을 사용하여 비밀번호를 확인할 때 불일치가 발생합니다.

제공하신 스니펫을 보면 데이터베이스에 저장된 비밀번호가 해시되어 있음을 알 수 있습니다("$2y$10$"로 시작). , 사용자가 입력한 비밀번호는 일반 텍스트(string(1) "1")입니다. 문제는 데이터베이스에서 비밀번호를 검색하는 방식에 있습니다.

로그인 스크립트에서는 추가 처리 없이 데이터베이스 결과에서 직접 비밀번호 열을 검색합니다. 그러나 저장된 비밀번호는 해시되어 있으므로 사용자가password_verify()를 사용하여 입력한 일반 텍스트 비밀번호와 비교하려면 먼저 해시를 해제해야 합니다.

해결책:

로그인 스크립트에서 비밀번호 확인()을 사용하기 전에 데이터베이스에서 저장된 해시 비밀번호를 검색한 다음 PASSWORD_DEFAULT 알고리즘과 함께 비밀번호_해시() 함수를 사용하여 해시를 해제해야 합니다. 로그인 스크립트에 대한 수정된 코드는 다음과 같습니다.

<code class="php">// ...same code as before...

$stored_hash = $row['password']; // Retrieve the stored hashed password
if (password_verify($pwd, $stored_hash)) {
    // ...same code as before...
}</code>

이 수정을 통해 데이터베이스에 저장된 비밀번호는 사용자가 입력한 일반 텍스트 비밀번호와 비교되기 전에 적절하게 해시 해제되어 비밀번호 확인()이 작동할 수 있습니다. 맞습니다.

위 내용은 비밀번호 해시 불일치로 인해 PHP 비밀번호 확인이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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