微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bcrypt 相同字符串的不同哈希?

如何解决bcrypt 相同字符串的不同哈希?

我使用相同的密码在 MysqL 中创建了用户,然后此代码片段使用 bcrypt 将纯文本密码更改为哈希。为什么同一个字符串的哈希值不同?

import MysqL.connector
import bcrypt

mydb = MysqL.connector.connect(
    host="localhost",user="root",password="........",database="briandb",)
mycursor = mydb.cursor()

for user in ["bob","alice"]:
    password = "ttt"
    print(password)
    hashed = bcrypt.hashpw(password.encode("utf-8"),bcrypt.gensalt())
    print(hashed)
    mycursor.execute(
        f'UPDATE users set password = "{hashed}" where user = "{user}"'
    )
    mydb.commit()

解决方法

您发现了强大的密码散列的一个关键特性:每次您对密码进行散列时,都会得到不同的结果。为什么?

每次都使用不同的随机盐(来自此处的 bcrypt.gensalt())。

为什么这很重要?

如果网络蠕虫闯入您的系统并窃取您的 users 表,他们将拥有您的加盐哈希密码。当散列正确完成时,恢复未加盐的密码是非常困难的。如果他们接下来闯入银行系统并窃取他们的散列密码,我们不希望他们能够得出结论,某些用户在两个系统上具有相同的密码。如果他们能猜到这一点,他们就会知道针对哪些用户进行更深入的网络犯罪。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。