2013-02-10 170 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,你需要一個合理的字符編碼默認值,鹽值,迭代次數/成本因子等。