我想以网站管理员能够升级密码哈希算法的方式设计用户表。
为不同的用户使用多个版本的哈希并创建一个名为hashingVersion (TINYINT)
的字段是否正确?
这是一个好习惯吗?还是有更好的方法吗?
答案 0 :(得分:2)
首先,你提到你使用盐是好的。
我建议在数据库中创建另一个字段以存储新版本的密码。
+-------+--------+--------+
| user | bcrypt | scrypt |
+-------+--------+--------+
| tom | null | *** |
| peter | null | *** |
| mary | *** | null |
+-------+--------+--------+
当前身份验证将首先尝试使用新哈希进行验证,如果新哈希为null
,则使用旧哈希进行身份验证。
更改密码将强制删除旧哈希。 新用户将使用新算法作为默认值。
这样一个字段就不会有混合信息,而且更容易管理。 您可能希望强制用户在下次登录时更改密码,以便他们能够更快地获得新的哈希哈希值。
由于新身份验证必须与两个哈希一起使用,因此必须在使用之前对其进行验证,以最大限度地减少安全问题。否则,粗心or
错误将导致错误登录。