>  Q&A  >  본문

PHP의 비밀번호 해싱 문제 -password_verify()는 항상 false를 반환합니다.

<p>PHP의 비밀번호 해싱에 문제가 있습니다. 나는 비밀번호를 등록할 때 관리자 비밀번호를 해시하고 데이터베이스에 저장하기 위해 Password_hash() 함수를 사용합니다. 그러나 로그인할 때 비밀번호 확인()을 사용하여 비밀번호를 확인하려고 하면 비밀번호가 정확하다고 확신하는데도 항상 false가 반환됩니다.

다음은 내 코드의 요약입니다:


<pre class="brush:php;toolbar:false;">$adminPassword = "test123"; $adminPasswordHash = 비밀번호_해시($adminPassword, PASSWORD_BCRYPT); // ... $adminPasswordHash를 데이터베이스에 저장합니다 ... // 로그인 중: $adminInputPassword = "test123"; $adminPasswordHashVERIFY = "$2y$10$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm"; if (password_verify($adminInputPassword, $adminPasswordHashVERIFY)) { echo "비밀번호가 맞습니다!"; } 또 다른 { echo "비밀번호가 틀렸습니다!"; }</pre> <p>$adminPassword와 $adminInputPassword의 값이 동일한지 확인했지만 유효성 검사에서는 항상 false를 반환합니다. 또한 Password_hash() 함수를 사용하고 PASSWORD_BCRYPT 대신 PASSWORD_DEFAULT를 매개변수로 전달하려고 시도했지만 결과는 동일했습니다. </p><p>해시 생성이나 확인 과정에서 뭔가 빠졌나요? 이 문제에 대한 도움이나 통찰력을 주시면 대단히 감사하겠습니다. 감사해요!


P粉481035232P粉481035232417일 전450

모든 응답(1)나는 대답할 것이다

  • P粉099000044

    P粉0990000442023-07-31 13:54:06

    문제를 찾았어요! $adminPasswordHashVERIFY 변수에 큰따옴표(")를 사용했기 때문에 문제가 발생한 것으로 보입니다. 큰따옴표를 사용하면 PHP가 문자열을 해석하고 그 안에 있는 변수를 대체합니다. $fReIQ라는 변수가 없으므로 PHP에서 이를 처리합니다. un 정의된 변수로 인해 유효성 검사 시 잘못된 해시 값이 발생합니다.

    이 문제를 해결하려면 $adminPasswordHashVERIFY 변수에서 해시된 비밀번호를 작은따옴표(')로 사용하세요. 이렇게 하면 해시된 비밀번호가 일반 문자열로 처리됩니다. . PHP로 해석되는 대신

    이제 다음 코드를 시도하면 "비밀번호가 정확합니다!"라는 출력이 표시됩니다. ".


    으아아아

    회신하다
    0
  • 취소회신하다