<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>해시 생성이나 확인 과정에서 뭔가 빠졌나요? 이 문제에 대한 도움이나 통찰력을 주시면 대단히 감사하겠습니다. 감사해요!
문제를 찾았어요! $adminPasswordHashVERIFY 변수에 큰따옴표(")를 사용했기 때문에 문제가 발생한 것으로 보입니다. 큰따옴표를 사용하면 PHP가 문자열을 해석하고 그 안에 있는 변수를 대체합니다. $fReIQ라는 변수가 없으므로 PHP에서 이를 처리합니다. un 정의된 변수로 인해 유효성 검사 시 잘못된 해시 값이 발생합니다.
이 문제를 해결하려면 $adminPasswordHashVERIFY 변수에서 해시된 비밀번호를 작은따옴표(')로 사용하세요. 이렇게 하면 해시된 비밀번호가 일반 문자열로 처리됩니다. . PHP로 해석되는 대신
이제 다음 코드를 시도하면 "비밀번호가 정확합니다!"라는 출력이 표시됩니다. ".
으아아아