如何解决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 举报,一经查实,本站将立刻删除。