在MySQL中存储哈希密码

9

我正在使用PHP中的盐值sha1创建哈希密码。

我的问题是:在MySQL中,存储结果的适当字符编码、字段类型和长度是什么?

还有什么其他关于密码安全需要考虑的MySQL方面的问题吗? 最后,SHA256或SHA512是否是实用的哈希选择?

2个回答

12

SHA-2算法(SHA-256,SHA-512)是可行的选择;但是它们需要更多的存储空间。例如,要存储SHA-256的十六进制数字,您需要一个CHAR(64)字段。关于SHA-1是否“破解”,有一些疑问Schneier进行了讨论NIST发表了评论。如果这些问题令您担忧,那么最好使用其中一个SHA-2函数。

如果您想增加暴力攻击的成本,您还可以考虑使用像PBKDF2这样的算法来添加一些迭代。有人在这里的评论中发布了一个示例


例如,要存储SHA-256的十六进制数字,您需要一个CHAR(64)字段。你能解释一下吗?谢谢。 - JDelage
2
@JDelage:我只是在提到存储所需的十六进制位数。输出为256位=> 32字节=> 64个十六进制数字。如果存储是一个问题,它可以以某种原始/二进制字段类型存储在32字节中。 - Mark Wilkins

5

对于SHA1哈希值,CHAR(40)是最佳的字段类型和长度。字符编码不太重要,所有字符都在ASCII范围内。为了保持一致性,我会使用与数据库中其余部分相同的字符集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接