py-bcrypt提供不同于hash-bcrypt的哈希结果 - 可能吗?

时间:2014-08-05 10:06:51

标签: python bcrypt

我使用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')

但这也不起作用。

1 个答案:

答案 0 :(得分:0)

如果要生成相同的哈希,则需要两者使用相同的密码相同的哈希值。