@Wynter password_hash($pass1, PASSWORD_DEFAULT)에서 $pass1을 넣었던게 원인이었네요 ㅜㅜ 다른 변수로 교체하니 잘 작동합니다. 제가 논리적 오류에 빠졌었네요. Wynter님께서 달아주신 코멘트가 큰 도움이 되었네요. 도움 주셔서 감사합니다.
장준영
@장준영
Posts made by 장준영
-
RE: php password_verify()가 false만 리턴합니다.
-
RE: php password_verify()가 false만 리턴합니다.
@Wynter 아니요 출력값을 대조하니 육안상으로는 같다는 말이었습니다. var_dump로 비교했는데 둘 다 string(60)에 내용도 같아서 동일하다고 생각했습니다.
-
RE: php password_verify()가 false만 리턴합니다.
@Wynter $hash값과 password_hash($pass1, PASSWORD_DEFAULT)값은 서로 같습니다.
방금전에 $hash = substr( $hash, 0, 60 ); 추가해보았는데 false만 리턴됩니다. -
RE: php password_verify()가 false만 리턴합니다.
@Wynter password_hash에 의해 생성된 값을 db에 삽입하고, 삽입된 hash 값을 $hash에 할당시켜주었는데 false가 반환됩니다.
-
php password_verify()가 false만 리턴합니다.
$db = mysqli_connect('localhost','root','test','level1');
mysqli_set_charset($db, "utf8");if (isset($_POST['mb_id']) && isset($_POST['password'])){
$user_id = mysqli_real_escape_string($db, $_POST['mb_id']);
$pass1 = $_POST['password'];if (empty($user_id)){ header("location: login_view.php?error=아이디가 비어있어요."); exit(); } else if (empty($pass1)){ header("location: login_view.php?error=비밀번호가 비어있어요."); exit(); } else { $sql = "select * from member where mb_id = '$user_id'"; $result = mysqli_query($db, $sql); if (mysqli_num_rows($result) === 1){ $row = mysqli_fetch_assoc($result); $hash = $row['password']; // echo $hash."------"; // echo $pass1; // echo var_dump(password_verify($pass1, $hash)); if (password_verify($pass1, $hash)){ header("location: login_view.php?success=로그인에 성공하였습니다."); //header("location: mypage/mypage.php"); exit(); } else { header("location: login_view.php?error=로그인에 실패하였습니다."); exit(); } } }
}
코드는 위와 같습니다. DB의 password 길이는 256자입니다. password_verify()의 첫번째 항에 입력 받은 비밀번호, 두번째 항에는 암호화된 비밀번호를 넣었습니다. 그런데 계속 false가 반환됩니다.
라이브러리에 password_verify()가 없어서 생기는 버그인 줄 알았는데, 없는 건 아니더라구요. password_verify($pass1, $hash) 대신에 password_verify($pass1, password_hash($pass1, PASSWORD_DEFAULT))를 사용하면 true가 나오긴 합니다.
어디가 문제인지 모르겠습니다.