我對PHP比較陌生,剛開始掌握了關於哈希密碼(我認爲?)的一點看法。無論如何,這是我的問題...基本的PHP pbkdf2散列
現在我有一個用戶名,密碼,鹽字段的MySQL數據庫。密碼字段長度爲64個字符,鹽字段爲3個字符。在註冊時,每個用戶名都被分配一個隨機鹽。我對此沒有任何問題(我相信)。首先,用戶期望的口令是通過散列:
$hashedinput = hash ('sha256', $input);
的用戶期望的口令,然後用包含通過以下步驟PBKDF2鹽散列,並且在數據庫中輸入:
$password = pbkdf2('sha256', $hashedinput, $salt, 10000, 64);
我問題在於登錄。將數據庫中的散列密碼與用戶輸入的密碼進行比較時,它總是返回!=。這是我做的驗證登錄:
$userData = mysql_fetch_array($search, MYSQL_ASSOC);
$inputhash = hash('sha256', $input); // From Form
$salt = $userData['salt']; // Salt from DB
$password = pbkdf2('sha256', $inputhash, $salt, 10000, 64);
$knownpassword = $userData['password']; // Known password from DB
所以,解決我回顯所有的輸出,這是個什麼樣子,當我輸入正確的密碼(和它不記錄我)像:
輸入密碼:3d8bc905668c1a1cca5b53a78941d3ca4673e12df6ac5e98e19fa47b153406f6e66913e43bf60478907ca07429b0cf90c808ce2097e0544cc44d298bfb7b85ad
DB密碼:3d8bc905668c1a1cca5b53a78941d3ca4673e12df6ac5e98e19fa47b153406f6
注意,輸入密碼的前64個字符是正確的,但它總共繼續保留128個字符。 DB密碼僅爲64.
提前致謝!
謝謝!該API非常有用。 – 2013-02-12 04:53:51