我散列密碼如下:驗證一個哈希密碼
mysalt = os.urandom(12).encode('hex')
passhash = mysalt + pw
hash = str(pbkdf2_sha256.encrypt(passhash))
我如何可以驗證此密碼與用戶入口?如下:
hash3 = str(pbkdf2_sha256.encrypt(passhash))
...返回一個完全不同的值。
在此先感謝。
我散列密碼如下:驗證一個哈希密碼
mysalt = os.urandom(12).encode('hex')
passhash = mysalt + pw
hash = str(pbkdf2_sha256.encrypt(passhash))
我如何可以驗證此密碼與用戶入口?如下:
hash3 = str(pbkdf2_sha256.encrypt(passhash))
...返回一個完全不同的值。
在此先感謝。
確保您在存儲密碼時使用相同的鹽,因爲您檢查密碼時:passhash
不同鹽的值會導致不同的哈希值。
您可以爲每個密碼(更方便)使用相同的鹽,爲每個用戶(更安全)使用和存儲不同的鹽,或兩者的組合。
編輯:你沒有指定你使用哪個庫來獲得pbkdf2_sha256
。這可能是因爲圖書館本身可以處理與鹽有關的任務。例如,PassLib會爲您生成一個鹽並將其包含在結果中。它提供了一個verify
方法來根據該結果檢查用戶的輸入。
建議不要比較結果字符串 - 通常編碼會妨礙您的工作。嘗試比較實際字節。
的解決方案是:
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)
這是很難從代碼明智的,如果你不添加一些格式。 – arkascha
我希望你使用相同的鹽,而不是嘗試用新的鹽。 –