我想以网站管理员能够升级密码哈希算法的方式设计用户表。
为不同用户使用多个版本的哈希并创建名为 hashingVersion (TINYINT)
的字段是否正确?
这是一个好的做法吗?或者还有什么更好的方法吗?
最佳答案
首先,你提到你使用盐是件好事。
我建议在数据库中创建另一个字段来存储新版本的密码。
+-------+--------+--------+
| user | bcrypt | scrypt |
+-------+--------+--------+
| tom | null | *** |
| peter | null | *** |
| mary | *** | null |
+-------+--------+--------+
当前身份验证将首先尝试使用新哈希进行验证,如果新哈希为null
,则使用旧哈希进行身份验证。
更改密码将强制删除旧的哈希值。 新用户将默认使用新算法。
这样一个字段就不会出现混合信息,更容易管理。 您可能希望强制用户在下次登录时更改密码,以便他们更快地获得带盐的新哈希值。
由于新的身份验证必须同时使用两种哈希值,因此在使用之前必须进行验证,以最大程度地减少安全问题。否则,粗心的或
错误可能会导致错误登录。
关于php - 多版本哈希密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16831601/