我使用flask-security顶部的flask-bcrypt包在python应用程序中生成哈希。对于test12的密码,我得到了'$ 2a $ 12 $ ibinoz7sTc76Vh09shUhruYD8CrJyUxPpu1m.kb6LmFmzvWBbb52a'的结果
(使用随机生成的盐,每个bcrypt文档)
但是当我在python终端中执行以下操作时:
import py-bcrypt
print bcrypt.hashpw("test12", '$2a$12$ibinoz7sTc76Vh09shUhruYD8CrJyUxPpu1m.kb6LmFmzvWBbb52a')
我得到: $ 2A $ 12 $ ibinoz7sTc76Vh09shUhru1wllZi3KqQEluhhInj5FAghM4uczmxe
当我想我应该把原版作为一个匹配。我还检查了.checkpw并返回False。
我做错了什么?他们可能会产生不同的结果吗?我的应用验证就好了。
更新:当我手动调用时(在Flask应用中)
print check_password_hash('$2a$12$ibinoz7sTc76Vh09shUhruYD8CrJyUxPpu1m.kb6LmFmzvWBbb52a', 'test12')
我也得到假。非常奇怪,确实,考虑'test12'可以登录。如果我在应用程序中生成一个新的密码哈希,并使用上面的方法进行检查,则会传递。
更新2:我了解到flask-security使用HMAC,以及所选密码哈希后端(在我的情况下是bcrypt),我怀疑这是我的不一致的原因。假设这是真的,问题就变成了,如何验证同时应用了HMAC和bcrypt的密码哈希。我的应用程序配置为提供一个密钥作为HMAC盐(sha512),所以我尝试了:
result = hmac.new('...my apps secretkey...', 'test12', hashlib.sha512).hexdigest()
print bcrypt.checkpw(result, '$2a$12$ibinoz7sTc76Vh09shUhruYD8CrJyUxPpu1m.kb6LmFmzvWBbb52a')
但这也不起作用。
答案 0 :(得分:0)
如果要生成相同的哈希,则需要两者使用相同的密码和相同的哈希值。