使用PassLib从Flask用户密码验证哈希

时间:2018-11-26 20:29:21

标签: django flask passlib

我目前正在尝试将Flask用户迁移到Django后端。

但是,当我使用passlib验证哈希时,我不知道为什么它无法验证。

我们的烧瓶应用程序设置

SECURITY_PASSWORD_HASH = "pbkdf2_sha512"
SECURITY_PASSWORD_SALT = "stackoverflow" # this is an example

我从数据库中提取哈希的示例

  

flask_hash =   “ $ pbkdf2sha512 $ 12000 $ ZQyhNEbIOSfk / J / T2vs / Bw $ j.yxtixV.DqAcpsY9XTnJZZb3lCkR2fMWmV329Uc7Y / vz5Z0yMshEkYlRsg2Z9Lz

所以我用回合和盐创建了一个自定义pbkdf2_sha512     从passlib.hash导入pbkdf2_sha512

rounds = 12000
salt = "stackoverflow".encode() # assume I swapped this out with the right salt
custom_pbkdf2 = pbkdf2_sha512.using(rounds=rounds, salt=salt)

verify_result = custom_pbkdf2.verify(hash=flask_hash, secret=password)
print (verify_result) # false

但是,如果我创建一个新的哈希值,它确实可以工作

test_hash = custom_pbkdf2.hash('testing-if-this-works')
test_hash_confirm = custom_pbkdf2.verify('testing-if-this-works', hash=test_hash)

有什么我想念的吗?非常感谢您在这里提供的任何帮助...我知道密码-这是我用于测试的虚拟帐户。

1 个答案:

答案 0 :(得分:0)

我在完全相同的情况下也感到震惊,幸运的是发现了这个reddit thread,上面有解释。

基本上,您需要验证用户的是:

from flask_security.utils import verify_password
verify_password(<plain text password>, <password hash>)

更多详细信息here