php - 多版本哈希密码

标签 php database-design hash

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

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

这是一个好的做法吗?或者还有什么更好的方法吗?

最佳答案

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

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

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

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

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

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

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

关于php - 多版本哈希密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16831601/

相关文章:

javascript - 如何在laravel中使用jquery ajax保存多个表单数据?

mysql - 数据库拆分;多个表

mysql - 数据库建模思想

apache - 如何防止在 Tomcat 7.0.52 中使用散列密码登录?

java - 货币实用程序 Java 错误代码 'int java.lang.Object.hashCode()'

javascript - 连接两个页面内的数据

php - 使用 Gmail 在 codeigniter 中通过电子邮件类发送电子邮件

php - MySQL 3 链接表...查找不在特定组中的用户

Android(分布式应用)主键策略

python - 哈希冲突的预期数量