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

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

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


当前回答

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

其他回答

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

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

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

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

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