2

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

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

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

4

1 回答 1

2

首先,你提到你使用盐很好。

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

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

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

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

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

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

于 2013-05-30T09:11:04.137 回答