我有一个带有用户数据库的应用程序。数据库使用带有随机盐的 bcrypt 哈希存储密码。
在这种情况下,如何实现密码历史记录集(以防止密码重用)?
如果我有传统的 3 字段密码重置(输入当前密码,输入新密码,确认新密码),我可以存储当前密码,因为我用新密码替换旧密码。但是,后来我有忘记密码的情况。我的用户可以去进行自助服务自动重置并一遍又一遍地重复使用他们的密码。
存储的密码将被加密,但可逆加密使它们的安全性降低。
我有一个带有用户数据库的应用程序。数据库使用带有随机盐的 bcrypt 哈希存储密码。
在这种情况下,如何实现密码历史记录集(以防止密码重用)?
如果我有传统的 3 字段密码重置(输入当前密码,输入新密码,确认新密码),我可以存储当前密码,因为我用新密码替换旧密码。但是,后来我有忘记密码的情况。我的用户可以去进行自助服务自动重置并一遍又一遍地重复使用他们的密码。
存储的密码将被加密,但可逆加密使它们的安全性降低。
存储旧的盐值和哈希值。用任何旧盐对新输入进行散列,看看它们是否匹配。
如果在正常登录时检查密码有效,那么检查密码是否以前使用过也有效。
如果password1 = password2,那么hash(password1, salt1) = hash(password2, salt1)。
换句话说:
使用相同的盐和迭代次数对新密码进行 Bcrypt。
比较哈希值。
如果新散列与旧散列不同,则一切正常(根据您的标准),您可以简单地使用新的唯一盐重新散列新密码并将其存储在数据库中。
如果新哈希相同,则新密码与旧密码相同。告诉您的用户选择一个新的。