【问题标题】:Password hashing and verification密码哈希和验证
【发布时间】:2018-11-15 20:20:10
【问题描述】:

我现在正在尝试学习密码的散列和验证,有人告诉我使用模块passlibpbkdf2。 我被推荐的代码是:

到哈希:

 from passlib.hash import pbkdf2_sha256 
 hash = pbkdf2_sha256.hash("password", rounds=20000, salt_size=16)

验证:

from passlib.hash import pbkdf2_sha256
pbkdf2_sha256.verify("password", hash)

我想我理解这里的所有代码,除了一件事,任何给定密码的哈希将存储在哪里,主要是如何输入我想要验证的密码, 我尝试使用

password = input("Enter a password here: ")

自从我尝试打印哈希后,这很有效,每次输入相同的密码时,我都会得到相同的哈希,所以到目前为止,一切正常。

现在,我尝试通过新输入重置密码,然后在其后添加身份验证码,认为我已将密码设置为新值,每次输入密码时我都应该能够获得 False 值与输入的第一个不匹配,但是,无论第二个输入如何,都返回 True

这是完整的代码

from passlib.hash import pbkdf2_sha256

password = input("Enter a password:")
hash = pbkdf2_sha256.hash("password", rounds=20000, salt_size=16)
print(hash)

password = input("please enter your password:")

print(pbkdf2_sha256.verify("password", hash))

然后我尝试将第二个密码设置为“password2”并且总是返回 false。

【问题讨论】:

    标签: python python-3.x hash


    【解决方案1】:

    您正在散列和验证文本“密码”,而不是散列和​​验证输入。对变量名称进行细微更改,以便更清楚地了解您需要更改的内容:

    from passlib.hash import pbkdf2_sha256
    
    password_input = input("Enter a password:")
    hash = pbkdf2_sha256.hash(password_input, rounds=20000, salt_size=16)
    print(hash)
    
    password_confirm = input("please enter your password:")
    
    print(pbkdf2_sha256.verify(password_confirm, hash))
    

    【讨论】:

    • 哦,没听清楚,你说得对,谢谢,它现在可以工作了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多