Php 多版本哈希密码

Php 多版本哈希密码,php,database-design,hash,Php,Database Design,Hash,我想以网站管理员能够升级密码哈希算法的方式设计一个用户表 为不同的用户使用多个版本的哈希并创建名为hashingVersion(TINYINT)的字段是否正确 这是一种好的做法吗?或者有更好的方法吗?首先,你提到你用盐很好 我建议在数据库中创建另一个字段来存储新版本的密码 +-------+--------+--------+ | user | bcrypt | scrypt | +-------+--------+--------+ | tom | null | *** | |

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

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


这是一种好的做法吗?或者有更好的方法吗?

首先,你提到你用盐很好

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

+-------+--------+--------+
| user  | bcrypt | scrypt |
+-------+--------+--------+
| tom   | null   | ***    |
| peter | null   | ***    |
| mary  | ***    | null   |
+-------+--------+--------+
当前身份验证将首先尝试使用新哈希进行验证,如果新哈希为
null
,则使用旧哈希进行身份验证

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

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


因为新的身份验证必须同时使用这两种哈希,所以在使用之前必须对其进行验证,以最大限度地减少安全问题。否则,粗心的
错误将导致错误登录。

什么是“哈希版本”?你最好用盐,我用盐。版本示例:1代表bcrypt,2代表scrypt。现在我使用bcrypt,将来我会使用scrypt,但是一些用户可能不会登录来升级他们的密码。问题是哈希算法可能不限于两个,我们不希望创建3个或更多的表,也不希望每次引入新算法时都修改数据库。与使用版本字段相比,单独字段有什么优势吗?@amerza我认为使用您建议的选项只有一个缺点-密码字段必须是所用算法的最大大小。例如,如果有3个字段,长度分别为30、40和100,则字段的长度必须为100。如果这不是一个问题,那就试试吧it@amerza但正如@Vlad Preda所说,在切换算法时,您可能仍然需要修改数据库中的长度或其他内容。(1) 我总是告诉自己避免在同一
字段中混合不同的数据。
字段
用于存储相同类型的数据,对吗?当然,你可能对此有不同的看法。(2) 但是,如果新算法和旧算法的长度不同,您甚至不必使用
哈希版本
进行识别,只需根据哈希长度对不同的验证进行硬编码即可。