我应该使用什么哈希算法?

时间:2010-09-24 21:52:13

标签: php passwords hash

PHP函数hash_algos()在我的网络服务器上给出了这个列表:

[0] => md2
[1] => md4
[2] => md5
[3] => sha1
[4] => sha256
[5] => sha384
[6] => sha512
[7] => ripemd128
[8] => ripemd160
[9] => ripemd256
[10] => ripemd320
[11] => whirlpool
[12] => tiger128,3
[13] => tiger160,3
[14] => tiger192,3
[15] => tiger128,4
[16] => tiger160,4
[17] => tiger192,4
[18] => snefru
[19] => gost
[20] => adler32
[21] => crc32
[22] => crc32b
[23] => haval128,3
[24] => haval160,3
[25] => haval192,3
[26] => haval224,3
[27] => haval256,3
[28] => haval128,4
[29] => haval160,4
[30] => haval192,4
[31] => haval224,4
[32] => haval256,4
[33] => haval128,5
[34] => haval160,5
[35] => haval192,5
[36] => haval224,5
[37] => haval256,5

我应该使用哪些以及为什么?特别是,我应该使用哪一个进行密码哈希?

3 个答案:

答案 0 :(得分:1)

用于密码哈希的SHA256或SHA384 。我听说一些美国组织的政策禁止使用具有更高位长的SHA的软件组件,但这取决于。

如果可以使用SHA,请避免使用MDx来散列安全密码等密码。见Is MD5 really that bad?

CRCxx用于校验和,它们对于哈希值很小,因为它们的值范围要小得多。

其他人,我不知道他们的用例。

答案 1 :(得分:1)

答案是你不应该直接使用上述任何哈希算法。由于您使用的是PHP,因此可以考虑 phpass (由WordPress,Drupal 7使用)http://www.openwall.com/phpass/

PHP社区中有很多关于此主题的讨论,因此不要重新发明安全性。

  1. http://drupal.org/node/29706
  2. http://core.trac.wordpress.org/ticket/2394

答案 2 :(得分:-4)

md5和sha1都适合密码散列。不幸的是,它们仍然容易受到彩虹表专用攻击者的攻击,但最低密码长度要求将缓解这一问题。