2016-05-17 126 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