2015-10-12 138 views
0

我需要一些幫助。我真的不明白爲什麼這些都不是都回歸「真實」。我的id爲6的測試用戶具有「test」作爲密碼。當我創建他時,價值被存儲。password_verify從數據庫返回false,但是從站點返回true?

我知道這兩個散列值是不一樣的,但似乎每個人都能夠做到像這裏計算器:)

<?php 

require_once 'includes/database.php'; 
require_once 'includes/connection.php'; 

$sql_1 = 'SELECT * FROM anew_users WHERE user_id = 6'; 
$result_1 = $conn->query($sql_1); 
while($row = $result_1->fetch_assoc()) { 

    $password = $row["user_password"]; 

} 

$submittedPassword = "test"; 

echo $password . "<br>"; 
echo $submittedPassword . "<br>"; 

$verify = password_verify($submittedPassword, $password); 
echo var_dump($verify); 

$password = hashPassword('test'); 
$submittedPassword = "test"; 

echo $password . "<br>"; 
echo $submittedPassword . "<br>"; 

$verify = password_verify($submittedPassword, $password); 
echo var_dump($verify); 

輸出是:

//OUTPUT 
$2y$10$aAHYMEvpW2o9ZRsD0XN2XOpYz.dmuqj5v4UdAPIZX9Eo0SW0NjGRe 
test 
bool(false) 

$2y$10$.srmofPee5SWV6nmOy0PAOIlzoJPT0SBnzNN0QkYZKlpk3LzgI7F. 
test 
bool(true) 

我創建了這個代碼的密碼:

function hashPassword($string) { 
    $output = password_hash($string, PASSWORD_DEFAULT, ['cost' => 10]); 
    return $output; 
} 

$user_password = escape($_POST["user_password"]); 
$user_passwordhashed = hashPassword($user_password); 

在此先感謝。

與逃生功能

function escape($string) { 
    $string = trim($string); 
    $string = stripslashes($string); 
    $string = htmlspecialchars($string); 
    return $string;  
} 
+0

我們可以看到你的「逃生」功能嗎? – Federkun

+0

我更新了我的帖子:) –

+0

你確定用戶的ID爲6的密碼真的是「測試」嗎?你可以嘗試用新密碼更新該值嗎? – Federkun

回答

1

這是散列並存儲在數據庫中的密碼更新未test,但一個空字符串。

$string = ''; 
$pass = '$2y$10$aAHYMEvpW2o9ZRsD0XN2XOpYz.dmuqj5v4UdAPIZX9Eo0SW0NjGRe'; 

$output = password_verify($string, $pass); 
var_dump($output);