작동하지 :이 VARCHAR (60)와 열에서 MySQL 데이터베이스에 저장됩니다password_verify() 나는과 같이 password_hash 사용하여 암호를 만든 PHP
$password = password_hash('password123', PASSWORD_DEFAULT);
.
if(password_verify($password, $foundUser->Password){ /*login*/ }
$password
는 로그인 양식에서 일반 텍스트 입력입니다
하고 $foundUser->Password
가 데이터베이스에 저장되어있는 해시이지만, password_verify()
함수는 항상 반환 : 내 로그인 폼에서
, 내가 사용 그릇된.
echo "Password: {$password} <br>"; echo "Found password: ".$foundUser->Password."<br>";
출력 :
Password: password123 Found password: $2y$10$8.ICQHCyCPzS.xygPO4cfuHsHZb6Kuxynn8/uUHOU1.7gY.UhSIXa
그래서 내가에 올바른 암호를 입력하고 받고 있어요 합리적으로 확신
는 다음 코드를 사용하여 내 입력을 확인했다 내 데이터베이스에서 올바른 해시.
답변을 찾기 위해 this question의 링크를 살펴 봤지만 아직 작동하지 않았습니다. 누구든지 password_verify()가 false를 반환하는 이유를 알고 있습니까?
설명서에서 "결과를 60 자 이상으로 확장 할 수있는 데이터베이스 열에 저장하는 것이 좋습니다 (255자를 선택하는 것이 좋음)." –
**'PASSWORD_DEFAULT'는 새롭고 강력한 알고리즘이 PHP에 추가됨에 따라 시간이 지남에 따라 변경되도록 설계되었습니다. 따라서이 식별자를 사용하여 얻은 결과의 길이는 시간이 지남에 따라 변경 될 수 있습니다. 따라서 결과를 60 자 이상으로 확장 할 수있는 데이터베이스 열에 저장하는 것이 좋습니다 (255자를 선택하는 것이 좋음). ** 처음부터 ... 데이터베이스에서 얻은 값이 정확히 'password_hash'가 생성 한 것과 같은 ...? – deceze
... 현재'PASSWORD_DEFAULT'는 BCrypt를 사용하지만 그래도 반드시 60 자 문자열이어야합니다. – CD001