我在考虑为每个用户密码使用两个密钥进行哈希,得到两个不同的哈希值。这样,除了实际的密码之外,几乎不可能找到另一个可用的密码。
这样做正确吗?它值得吗?
一个重要的规则要学习就是“永远不要试图发明自己的密码学”。 最好情况下只是浪费时间,最坏情况下会引入安全漏洞。
如果您不确定自己是否是这个规则的例外,那么您就不是这个规则的例外。
密码哈希函数的设计者已经担心了碰撞问题,所以您不需要担心。只需选择一个(SHA-256是一个很好的选择),并将精力集中在应用程序的其他部分上。
您可以使用SHA256作为哈希算法。迄今为止没有发现任何碰撞,并且未来在密码上看到任何碰撞的可能性非常小。
您可以使用更长的哈希值。例如,SHA-512是512位,(假设它是均匀的)与SHA-256相比,发生冲突的可能性要小得多。但就个人而言,我不会担心这个问题。大多数密码本身都少于32字节(256位),因此应该具有极低的与SHA-256冲突的概率。