PHPSESSID的PHP5哈希算法
我只是在谷歌上搜索了很多关于PHPSESSID的信息,我不知道他们目前使用的是哪种hashalgorithm。 我在我的根服务器上安装了PHP5.5并检查了我的会话ID,我发现当前ID看起来像这样3teao7a72gcg98pgelupl9l3。 如果你看一下旧版本的php,他们使用MD5算法散列用于会话的数据,如果我是对的,它类似于IP:TIMESTAMP:PHPRAND:SYSTEMRAND散列到MD5构建会话ID。 我检查了我的php.ini,并查看了会话的Hashfunction的属性PHPSESSID的PHP5哈希算法,php,Php,我只是在谷歌上搜索了很多关于PHPSESSID的信息,我不知道他们目前使用的是哪种hashalgorithm。 我在我的根服务器上安装了PHP5.5并检查了我的会话ID,我发现当前ID看起来像这样3teao7a72gcg98pgelupl9l3。 如果你看一下旧版本的php,他们使用MD5算法散列用于会话的数据,如果我是对的,它类似于IP:TIMESTAMP:PHPRAND:SYSTEMRAND散列到MD5构建会话ID。 我检查了我的php.ini,并查看了会话的Hashfunction的属性
; Select a hash function for use in generating session ids.
; Possible Values
; 0 (MD5 128 bits)
; 1 (SHA-1 160 bits)
; This option may also be set to the name of any hash function supported by
; the hash extension. A list of available hashes is returned by the hash_algos()
; function.
; http://php.net/session.hash-function
session.hash_function = 0
现在我想用哪个算法来表示PHPSESSID,我用一些散列标识符来检查它,但是没有得到结果,你知道一些站点是什么吗?我可以看看生成PHPSESSID的函数吗
谢谢您的帮助:)如果
session.hash\u函数
为0,则为MD5
您已经习惯于看到它是十六进制编码的,而PHP的会话扩展可能会根据session.hash\u bits\u per\u character
设置对其进行不同的编码
这背后有很多难以理解的逻辑,但基本上这就是最终结果:
$hash_bits_per_character = ini_get('session.hash_bits_per_character');
$hash_function = ini_get('session.hash_function');
switch ($hash_function) {
case 0:
$hash_function = 'md5';
break;
case 1:
$hash_function = 'sha1';
break;
default:
break;
}
$digest_size = mb_strlen(hash($hash_function, 'dummy', true), '8bit') * 4; // 128;
$sid_length = (int) ceil($digest_size / $hash_bits_per_character);
当您有session.hash\u bits\u per\u character=4
(默认值)时,这与十六进制编码相同,因此仅使用0-9a-f
字符。但当该值较高时,需要更多字符才能在单个字符中打包更多数据
这些是可能的:
:4
字符(十六进制编码)0-9a-f
:5
字符0-9a-v
:6
字符0-9a-zA-Z,-
session.hash\u bits\u per\u character=5
所有这些都不适用于PHP 7.1+,其中:
已替换为session.hash\u bits\u per\u character
session.sid\u bits\u per\u character
被删除,您直接提供session.hash_函数
session.sid_长度
bin\u to\u readable()
函数?顺便说一句,我喜欢rainbow elephpant:-)我更具体地指的是php\u session\u create\u id()。。。很高兴你喜欢我,如果我错了,请纠正我。默认MD5会剪切messagediggest结果中的一些位,如果您使用更多的字符,这意味着丢弃的位和生成的哈希字符串的用户更少?好吧,我必须纠正您:MD5仍然是MD5。。。它不会切任何东西。每个字符的高位将有效地“压缩”数据,从而产生较短的字符串,但实际上不会丢失任何字符串。