我正在按如下方式输入密码:
mysalt = os.urandom(12).encode('hex')
passhash = mysalt + pw
hash = str(pbkdf2_sha256.encrypt(passhash))
如何通过用户输入验证此密码?以下内容:
hash3 = str(pbkdf2_sha256.encrypt(passhash))
...返回一个完全不同的值。
提前致谢。
答案 0 :(得分:0)
确保在存储密码时使用相同的盐,就像检查密码一样:passhash
使用不同盐的值会导致不同的哈希值。
您可以为每个密码使用相同的盐(更方便),为每个用户使用和存储不同的盐(更安全),或两者的组合。
编辑:您没有指定用于获取pbkdf2_sha256
的库。可能是该库本身可以处理与盐相关的任务。例如,PassLib将为您生成一个盐并将其包含在结果中。它提供verify
方法来检查用户对该结果的输入。
答案 1 :(得分:0)
建议不要比较结果字符串 - 通常编码会妨碍。尝试比较实际的字节数。
答案 2 :(得分: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)