验证哈希密码

时间:2015-05-24 12:46:09

标签: python hash

我正在按如下方式输入密码:

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

如何通过用户输入验证此密码?以下内容:

hash3 = str(pbkdf2_sha256.encrypt(passhash))

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

提前致谢。

3 个答案:

答案 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)