2016-10-30 1 views
-4

PHP와 SQL을 사용하여 로그인/등록 양식을 설정하려고하고 있는데 암호 보호를 위해 password_hash() 및 password_verify()를 사용하고 있습니다. password_hash()는 잘 작동하지만 해쉬 된 패스워드 인 password_verify()로 패스워드를 검증하려고하면 FALSE를 리턴한다. 나는 PHP를 처음 사용하고 이것이 왜 일어나는지 확신 할 수 없다.

PHP 암호가 해싱하지 않는 것을 확인 하시겠습니까?


<?php 
 

 
include 'db.php'; 
 

 
$username = mysqli_real_escape_string($con, $_POST['username']); 
 
$password = mysqli_real_escape_string($con, ($_POST['password'])); 
 

 
$sql = "SELECT * FROM users WHERE `username`= '$username' "; 
 
$query = mysqli_query($con, $sql); 
 

 
while ($rows = mysqli_fetch_array($query)): 
 

 
    $user = $rows['username']; 
 
    $email = $rows['email']; 
 
    $passhash = $rows['password']; 
 

 
endwhile; 
 

 
$hash = password_verify($password, $passhash); 
 
// just echoing so i know they are the correct values 
 
echo $user.'<br>'; 
 
echo $email.'<br>'; 
 
echo $password.'<br>'; 
 
echo $hash.'<br>'; 
 
echo $passhash.'<br>'; 
 

 
if ($hash == 0) { 
 
    echo 'error'; 
 
} 
 

 
?>
편집 : 대체 정확한 용어로 'dehashed'
여기에 코드입니다.

+0

암호 해싱의 전체 지점이 암호를 바꿀 수 없거나 호출 할 때 해쉬 할 수없는 암호입니까? –

+0

Dehash? 흥미 롭군요 ... 해시는 뒤집을 수 없습니다 ... – Selvin

+1

Errrr ......... 뭐라고 요? DEhashing? 도살을하고 쇠고기에 넣은 후에 황소를 다시 집어 넣으려고 한 적이 있습니까? 잘 거기에 간다. –

답변

1

(암호 해시는 되돌릴 수없는 기능이므로) 암호를 "해시하지 않습니다". 그것이하는 일은 주어진 해쉬 (주어진 해쉬가 아닌) 패스워드가 해당 해쉬에 해당하는지 (TRUE를 반환하는지) FALSE인지를 검사하는 것입니다.

http://php.net/manual/en/function.password-verify.php이 데이터베이스 컬럼에 저장되어있는 암호가 http://php.net/manual/en/function.password-hash.php이 그렇지 않으면 password_verify 해시로 제공되는 값으로 작동하지 않습니다 참조

password_hash() 

으로 계산되어 있는지 확인하십시오.

+0

입니다. –

+0

편집하면 내 대답이 더욱 유용 해지기를 바랍니다. –

+0

OP가 얇은 공기로 사라진 것처럼 보입니다. 나는 왜 그것이 실패하고 있는지에 대한 내 자신의 견해를 가지고 있지만, 그 토끼 구멍 속으로 더 멀리 쫓겨날 까봐 두렵다. –

관련 문제