2014-03-25 91 views
0
include 'lib/php/PasswordHash.php'; 

$hash = $_GET['hash']; 
$pass = $_GET['pass']; 

$hasher = new PasswordHash(8, false); 
$pass = $hasher->HashPassword($pass); 
echo "Original:<br>" . $pass . "<br>"; 
$checked = $hasher->CheckPassword($pass, $hash); 
echo "Hashed:<br>" . $checked . "<br>"; 
echo "<br>"; 
echo "Are they equal? <b>"; 
if($pass == $checked){ echo "Yep!</b>";} else{ 
    echo "Nope. </b>"; 
} 

上面的令人難以置信的簡單的代碼根本不工作。是的,pass變量被散列並正確輸出,但CheckPassword()根本沒有輸出任何東西。我已經測試了一個簡單的單詞「hello」,並將它們直接插入到函數中(例如CheckPassword('$ 2 ...','$ 2 ...');並且它仍然不輸出任何內容。在XAMPP Windows上,我剛剛被迫斷定必須是這個問題,我用這個代碼而不是實際的項目來刪除數據庫,並且發現了這個問題PHPass拒絕檢查哈希

試圖限制你自己嘔吐在代碼的醜陋,但它是一個絕望的嘗試讓它的工作

如果你自己運行這個代碼,你需要把'通'和'哈希'GET變量在URL中測試這個,很可能我做了一個糟糕的事情在某個地方犯錯,所以我對自己的環境毫無自信。

編輯:

我用下面的代碼生成初始變量

$hash = $_GET['hash']; 

$hasher = new PasswordHash(8, false); 
$hash = $hasher->HashPassword($pass); 

echo $hash; 
+1

'CheckPassword'中的'$ pass'必須是明文,不是嗎? – zerkms

+0

我所做的編輯顯示了我如何生成單詞'hello'的散列,然後將其放入頂部的代碼的URL – SacredSkull

回答

2

您使用CheckPassword不正確的URL中使用。第一個參數應該是純文本;第二個散列,according to the documentation。您將$pass設置爲散列值,然後將其用作CheckPassword中的第一個參數。

更正碼(未測試):

include 'lib/php/PasswordHash.php'; 

$hash = $_GET['hash']; 
$pass = $_GET['pass']; 

$hasher = new PasswordHash(8, false); 
// Just delete this line: $pass = $hasher->HashPassword($pass); 
echo "Original:<br>" . $pass . "<br>"; 
$checked = $hasher->CheckPassword($pass, $hash); 
echo "Hashed:<br>" . $checked . "<br>"; 
echo "<br>"; 
echo "Are they equal? <b>"; 
if($pass == $checked){ echo "Yep!</b>";} else{ 
    echo "Nope. </b>"; 
} 

P.S.我不知道你爲什麼試圖從$_GET得到$hash的價值。如果你讓用戶指定密碼和哈希,他們可以欺騙你的應用程序授予訪問權限。我假設這只是一個測試,並且您將在真實應用程序中使用數據庫或其他安全存儲。

+0

「我使用此代碼而不是實際項目來刪除數據庫作爲因素,並且發現這個問題。「 但是,謝謝你解決了我的問題。我在他們的網站上查看教程,但我一定有誤讀。 – SacredSkull

+0

很高興幫助!請記住選擇一個答案! :) –

+0

只要我被允許這樣做,我會的。 (4分鐘的時間限制) – SacredSkull