如果运行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或惠而浦。
要回答你的两个问题:
- 什么是默认值?
的缺省值是 “0” - 你可以在offical PHP source code看到在Github
- “0” 和 “1” 是允许的,什么其他值,尽管分别记录?
那么,这有点难以解释,但我尝试。根据这个值的C实现,你可以找到here。根据checks inside this function,似乎只有0或1或other的值。 其他值似乎是来自hash_algos()数组的值。
为什么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
我downvoted你的答案,因为它没有回答这个问题。 php.ini表示代码“0”是md5,但是当使用print_r(hash_algos());时,所有版本的PHP都显示代码0为md2。所以看起来像php.ini使用与散列算法代码不同的代码。如果是这样,那么php.ini的代码是什么。 – Jimski
@Jimski更新了我的答案和更多细节。希望这可以让事情更清楚。 – codedge
@Jimski再次编辑,希望它能回答你的问题 – codedge