2015-05-24 79 views
1

我散列密碼如下:驗證一個哈希密碼

mysalt = os.urandom(12).encode('hex') 
passhash = mysalt + pw 
hash = str(pbkdf2_sha256.encrypt(passhash)) 

我如何可以驗證此密碼與用戶入口?如下:

hash3 = str(pbkdf2_sha256.encrypt(passhash)) 

...返回一個完全不同的值。

在此先感謝。

+0

這是很難從代碼明智的,如果你不添加一些格式。 – arkascha

+0

我希望你使用相同的鹽,而不是嘗試用新的鹽。 –

回答

0

確保您在存儲密碼時使用相同的鹽,因爲您檢查密碼時:passhash不同鹽的值會導致不同的哈希值。

您可以爲每個密碼(更方便)使用相同的鹽,爲每個用戶(更安全)使用和存儲不同的鹽,或兩者的組合。


編輯:你沒有指定你使用哪個庫來獲得pbkdf2_sha256。這可能是因爲圖書館本身可以處理與鹽有關的任務。例如,PassLib會爲您生成一個鹽並將其包含在結果中。它提供了一個verify方法來根據該結果檢查用戶的輸入。

0

建議不要比較結果字符串 - 通常編碼會妨礙您的工作。嘗試比較實際字節。

0

的解決方案是:

import os 
from passlib.hash import pbkdf2_sha256 
mysalt=os.urandom(12).encode('hex') 

hash = pbkdf2_sha256.encrypt("password") 
print hash 

print pbkdf2_sha256.verify("password", hash) 

pwd='sefrhiloliutzrthgrfsdyv<sef234244567!"234wsdycvhn' 

mypass =mysalt+pwd 

print mypass 

hash2 =pbkdf2_sha256.encrypt(mypass, rounds =200000) 
hash1= pbkdf2_sha256.encrypt(pwd, rounds=80000, salt_size=100) 

print"hash2: ", hash2 
print pbkdf2_sha256.verify(mypass,hash2)