2013-02-10 169 views
3

根据http://php.net/manual/en/function.hash.php,有一个PHP哈希方法:hash()。它支持以下所有方法,但我想知道,什么是绝对最安全的密码散列方法。哪个哈希算法对密码最安全?

Results: (in microseconds) 
    1. md4       5307.912 
    2. md5       6890.058 
    3. crc32b      7298.946 
    4. crc32       7561.922 
    5. sha1       8886.098 
    6. tiger128,3     11054.992 
    7. haval192,3     11132.955 
    8. haval224,3     11160.135 
    9. tiger160,3     11162.996 
    10. haval160,3     11242.151 
    11. haval256,3     11327.981 
    12. tiger192,3     11630.058 
    13. haval128,3     11880.874 
    14. tiger192,4     14776.945 
    15. tiger128,4     14871.12 
    16. tiger160,4     14946.937 
    17. haval160,4     15661.954 
    18. haval192,4     15717.029 
    19. haval256,4     15759.944 
    20. adler32      15796.184 
    21. haval128,4     15887.022 
    22. haval224,4     16047.954 
    23. ripemd256      16245.126 
    24. haval160,5     17818.927 
    25. haval128,5     17887.115 
    26. haval224,5     18085.002 
    27. haval192,5     18135.07 
    28. haval256,5     18678.903 
    29. sha256      19020.08 
    30. ripemd128      20671.844 
    31. ripemd160      21853.923 
    32. ripemd320      22425.889 
    33. sha384      45102.119 
    34. sha512      45655.965 
    35. gost       57237.148 
    36. whirlpool      64682.96 
    37. snefru      80352.783 
    38. md2       705397.844 
+2

上述密码的所有*的基本问题是他们被设计成快速*(或者说,而不是另外设计)。对于密码和这样的哈希函数应该是“相对计算昂贵”和“不可并行化”。 (我建议**不要**写你自己的密码库;这很难得到正确的,这只是提示。) – 2013-02-10 03:22:40

回答

6

以上都不是。

您应该use bcrypt

+0

如果我是正确的,它只有一个包含文件? – user2058041 2013-02-10 02:15:49

+0

@ user2058041:听起来没错。 (我不使用PHP,所以我不确定) – SLaks 2013-02-10 02:18:36

+1

+1,虽然有其他选择,如'scrypt'(不确定PHP绑定虽然) – 2013-02-10 03:21:16

0

什么是密码散列

要回答这个问题的前提下,绝对是最安全的方法:绝对是最安全的将可能是组成:

  1. 首先一个Hardware Security Module ,使用带HSM管理的密钥的HMAC,
  2. ,然后哈希with the winner of the Password Hashing Competition,一旦找到了胜利者,并且已经有5 - 10年的暴露于r世界和同行评论。

在此之前,最安全的大概是:

  1. 一个HSM同上,
  2. 一位来自canonical answer on password hashing好选择。

但是,实际上密码哈希并不是主要问题,只要对任何一个“好”解决方案进行哈希就足以满足要求。好的解决方案是:

  1. BCrypt,
  2. PBKDF2与HMAC与SHA256(或512)。
  3. 许多人也认为SCrypt是一个强有力的选择,虽然有些人认为它有点年轻。

对于上述两个你不应该滚动自己的作品。您应该始终使用专为长期密码存储而设计的成熟,经过充分测试并经过审查的库。密码散列不仅仅是使用BCrypt或者PBKDF2,你需要一个合理的字符编码默认值,盐值,迭代次数/成本因子等。