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

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

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


当前回答

实际上,您可以使用CHAR(哈希长度)来定义MySQL的数据类型,因为每种哈希算法总是计算出相同数量的字符。例如,SHA1总是返回一个40个字符的十六进制数。

其他回答

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

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

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

你可能会发现维基百科上这篇关于腌制的文章很有价值。这个想法是添加一组数据来随机化你的哈希值;如果有人未经授权访问密码散列,这将保护您的密码免受字典攻击。

实际上,您可以使用CHAR(哈希长度)来定义MySQL的数据类型,因为每种哈希算法总是计算出相同数量的字符。例如,SHA1总是返回一个40个字符的十六进制数。