我正在努力确保我使用sha512进行会话散列。当我打印出我的算法时,我得到了
Array
(
[0] => md2
[1] => md4
[2] => md5
[3] => sha1
[4] => sha224
[5] => sha256
[6] => sha384
[7] => sha512
[8] => ripemd128
etc....
)
所以在php.ini中我把它设置为,
session.hash_function = 7
我感到困惑的唯一原因是在.ini文件中它列出的散列方案与php打印的方式不同,例如0作为md5而不是md2。
; Select a hash function
; 0: MD5 (128 bits)
; 1: SHA-1 (160 bits)
这只是旧版php版本的默认哈希方案吗?
答案 0 :(得分:7)
0
和1
是actually documented唯一的数值:
session.hash_function允许你 指定用于的哈希算法 生成会话ID。 '0'表示 MD5(128位)和“1”表示SHA-1 (160位)。
如果您想利用其他算法:
从PHP 5.3.0开始,也可以 指定提供的任何算法 通过哈希扩展(如果是的话) 可用),像sha512或漩涡。 完整的支持列表 算法可以用 hash_algos()函数。
我承认它没有明确表达,但该指令的定义表明它的参数是mixed
类型。它需要hash_algos()返回的整数(仅适用于MD5和SHA-1)或算法的名称(字符串)。 (顺便说一下,这也意味着有两种方法可以指定MD5和SHA-1。)开发人员在添加新算法时改变主意,但保持向后兼容性。
我已经尝试过这段代码了,我得到了一个巨大的会话ID:
ini_set('session.hash_function', 'whirlpool');
答案 1 :(得分:2)
hash_algos()返回所有可用算法的字符串数组,因此不适合作为ini-setting“session.hash-function”的参数。只是尝试将您喜欢的算法设置为字符串而不是“0”或“1”。
答案 2 :(得分:2)
将哈希函数设置为字符串
session.hash_function = sha512