多版本哈希密码

时间:2013-05-30 08:44:19

标签: php database-design hash

我想以网站管理员能够升级密码哈希算法的方式设计用户表。

为不同的用户使用多个版本的哈希并创建一个名为hashingVersion (TINYINT)的字段是否正确?

这是一个好习惯吗?还是有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

首先,你提到你使用盐是好的。

我建议在数据库中创建另一个字段以存储新版本的密码。

+-------+--------+--------+
| user  | bcrypt | scrypt |
+-------+--------+--------+
| tom   | null   | ***    |
| peter | null   | ***    |
| mary  | ***    | null   |
+-------+--------+--------+

当前身份验证将首先尝试使用新哈希进行验证,如果新哈希为null,则使用旧哈希进行身份验证。

更改密码将强制删除旧哈希。 新用户将使用新算法作为默认值。

这样一个字段就不会有混合信息,而且更容易管理。 您可能希望强制用户在下次登录时更改密码,以便他们能够更快地获得新的哈希哈希值。

由于新身份验证必须与两个哈希一起使用,因此必须在使用之前对其进行验证,以最大限度地减少安全问题。否则,粗心or错误将导致错误登录。