2016-11-25 31 views
0

我有一個很大的問題,我必須使用db作爲密碼存儲爲PBKDF2(使用另一個perl腳本)來編寫一個php登錄頁面。當我通過查詢得到密碼時,我讀到: sha256:1000:2SeBDP88w4bqKbJaCJNpNuRHQhUM96X1:jgh/SZtmRWH5iDIwtXyFLtuuDf7YE + 7HQEJZ4KFFNAg =(我知道這個密碼,但我無法在php中重新生成它)。使用php檢查存儲在PBKDF2中的密碼

我試着用這個腳本(從php.net獲得):

$password = "qqqqq"; 
$iterations = 1000; 
$salt = "2SeBDP88w4bqKbJaCJNpNuRHQhUM96X1"; 
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20); 
echo $hash // result a2ba3349194c38f828af 

但通產生是a2ba3349194c38f828af而不是JGH/SZtmRWH5iDIwtXyFLtuuDf7YE + 7HQEJZ4KFFNAg =

誰寫的存儲這些Perl腳本密碼告訴我「密碼正在通過名爲'PBKDF2'的單向哈希方案進行編碼」

有些想法?有人知道我錯在哪裏?

回答

0
  • jgh/SZtmRWH5iDIwtXyFLtuuDf7YE+7HQEJZ4KFFNAg=是Base64的(在端=是死的贈品,雖然存在的Base64沒有拖尾=)。
  • 轉換爲十六進制值8E087F499B664561F9883230B57C852EDBAE0DFED813EEC7404259E0A1453408
  • 這仍然沒有答案,但現在我們可以很容易地看到它是64個十六進制字符=> 32個字節。
  • 你問了20個字節。
  • 它也看起來像你的鹽輸入是base64,但你傳遞給它的函數預計...無論base64_decode的輸出是什麼。

因此,您需要持續處理base64編碼的數據。然後你需要確保你的散列算法,迭代次數和輸出字節數都匹配perl腳本所說的內容。

0

試試這個

$hash = strtoupper(bin2hex($hash));