我不确定密码哈希是如何工作的(稍后将实现它),但现在需要创建数据库模式。

我正在考虑将密码限制为4-20个字符,但据我所知,加密哈希字符串将具有不同的长度。

那么,如何在数据库中存储这些密码呢?


当前回答

哈希是一个比特序列(128位、160位、256位等,取决于算法)。如果MySQL允许,你的列应该是二进制类型的,而不是文本/字符类型的(SQL Server数据类型是二进制(n)或varbinary(n))。你还应该给散列加盐。盐可以是文本或二进制,您需要一个相应的列。

其他回答

作为一个固定长度的字符串(VARCHAR(n)或MySQL的称呼)。 哈希总是有一个固定的长度,例如12个字符(取决于您使用的哈希算法)。因此,20个字符的密码将被简化为12个字符的哈希,4个字符的密码也将生成12个字符的哈希。

for md5 vARCHAR(32)是合适的。对于那些使用AES的人来说,最好使用varbinary。

我一直在测试寻找加密字符串的最大字符串长度,并将其设置为VARCHAR类型的字符长度。根据您将拥有多少条记录,它确实有助于数据库大小。

这取决于你使用的哈希算法。如果我没记错的话,密码的长度和散列的长度没有什么关系。查找您正在使用的哈希算法的规格,运行一些测试,并截断上面的部分。

为了向前兼容,您应该使用TEXT(存储无限数量的字符)。随着时间的推移,哈希算法(需要)变得更加强大,因此随着时间的推移,这个数据库字段将需要支持更多的字符。此外,根据您的迁移策略,您可能需要在同一个字段中存储新的和旧的散列,因此不建议将长度固定为一种类型的散列。