我想设计一个用户表的方式,网站管理员能够升级密码哈希算法。多个版本的哈希密码
为不同的用户使用多个散列版本并创建一个名为hashingVersion (TINYINT)
的字段是否正确?
这是一个很好的做法吗?或者有没有更好的方法?
我想设计一个用户表的方式,网站管理员能够升级密码哈希算法。多个版本的哈希密码
为不同的用户使用多个散列版本并创建一个名为hashingVersion (TINYINT)
的字段是否正确?
这是一个很好的做法吗?或者有没有更好的方法?
首先,你提到你使用盐是很好的。
我会建议创建另一个字段里面的数据库存储新版本的密码。
+-------+--------+--------+
| user | bcrypt | scrypt |
+-------+--------+--------+
| tom | null | *** |
| peter | null | *** |
| mary | *** | null |
+-------+--------+--------+
当前的认证将首先尝试与新的哈希来验证,如果新的散列null
,与旧散列进行身份验证。
更改密码将强制删除旧散列。 新用户将默认使用新算法。
这样一个字段不会有混合的信息,而且更容易管理。 您可能希望强制用户在下次登录时更改密码,以便他们可以更快地获得带有盐的新哈希值。
因为新的身份验证必须与两个哈希协同工作,所以在使用之前必须验证它以最大限度地降低安全性问题。否则,粗心的or
错误会导致登录失败。
你是什么意思“哈希版本”?你应该更好地使用盐。 – str
我用盐。版本示例:1为bcrypt,2为scrypt。现在我使用bcrypt,将来我会使用scrypt,但有些用户可能无法登录来升级他们的密码。 – amerza