2016-05-17 125 views
2

PHP session.hash_function使用哪種哈希算法作爲默認值? 以下頁面顯示默認值爲md5「0」: http://php.net/manual/en/session.configuration.php#ini.session.hash-function 但散列算法頁面顯示代碼「0」爲md2。 http://php.net/manual/en/function.hash-algos.phpPHP使用哪種哈希算法session.hash_function默認混合

如果php.ini上的代碼「0」確實對應於md5,那麼php.ini的其他哈希算法的代碼是什麼?例如,sha512的代碼是什麼?

回答

5

如果運行print_r(hash_algos());的follwing陣列是一種更可靠的方式找到它的設置是哪種算法,如前所述here

可以與hash_algos()函數來獲得的支持算法的完整列表。

我與PHP運行它7.0.5

Array 
(
    [0] => md2 
    [1] => md4 
    [2] => md5 
    [3] => sha1 
    [4] => sha224 
    [5] => sha256 
    [6] => sha384 
    [7] => sha512 
    [8] => ripemd128 
    [9] => ripemd160 
    [10] => ripemd256 
    [11] => ripemd320 
    [12] => whirlpool 
    [13] => tiger128,3 
    [14] => tiger160,3 
    [15] => tiger192,3 
    [16] => tiger128,4 
    [17] => tiger160,4 
    [18] => tiger192,4 
    [19] => snefru 
    [20] => snefru256 
    [21] => gost 
    [22] => gost-crypto 
    [23] => adler32 
    [24] => crc32 
    [25] => crc32b 
    [26] => fnv132 
    [27] => fnv1a32 
    [28] => fnv164 
    [29] => fnv1a64 
    [30] => joaat 
    [31] => haval128,3 
    [32] => haval160,3 
    [33] => haval192,3 
    [34] => haval224,3 
    [35] => haval256,3 
    [36] => haval128,4 
    [37] => haval160,4 
    [38] => haval192,4 
    [39] => haval224,4 
    [40] => haval256,4 
    [41] => haval128,5 
    [42] => haval160,5 
    [43] => haval192,5 
    [44] => haval224,5 
    [45] => haval256,5 
) 

更多細節:

hash_algos返回字符串數組的功能。數組的索引不指示ini文件的設置。你應該使用字符串,我。即用於ini設置的「sha512」,如session.hash_function = sha512

因爲它是寫在文檔,指定一個字符串值是可能的,因爲PHP 5.3

由於PHP 5.3.0,也可以指定任意的由散列擴展提供的算法(如果它是可用的),如sha512惠而浦

要回答你的兩個問題:

  1. 什麼是默認值?

的缺省值是 「0」 - 你可以在offical PHP source code看到在Github

  • 「0」 和 「1」 是允許的,什麼其他值,儘管分別記錄?
  • 那麼,這有點難以解釋,但我嘗試。根據這個值的C實現,你可以找到here。根據checks inside this function,似乎只有01other的值。 其他值似乎是來自hash_algos()數組的值。

    1. 爲什麼0 = MD5和1 = SHA1?(你可能會問) 由於這種enum在C

      枚舉{ PS_HASH_FUNC_MD5, PS_HASH_FUNC_SHA1, PS_HASH_FUNC_OTHER };

    坦率地說speeking你可以把(一種基於陣列)的指標,其在此之前導致

    0 => PS_HASH_FUNC_MD5, 
    1 => PS_HASH_FUNC_SHA1, 
    ... PS_HASH_FUNC_OTHER 
    
    +0

    我downvoted你的答案,因爲它沒有回答這個問題。 php.ini表示代碼「0」是md5,但是當使用print_r(hash_algos());時,所有版本的PHP都顯示代碼0爲md2。所以看起來像php.ini使用與散列算法代碼不同的代碼。如果是這樣,那麼php.ini的代碼是什麼。 – Jimski

    +0

    @Jimski更新了我的答案和更多細節。希望這可以讓事情更清楚。 – codedge

    +0

    @Jimski再次編輯,希望它能回答你的問題 – codedge