用于 PHPSESSID 的 PHP 5 Hashalgorythm

标签 php

我只是在谷歌上搜索了很多关于 PHPSESSID 的信息,但我不知道他们目前使用的是哪个 Hashalgorythm。 我在我的 Rootserver 上安装了 PHP 5.5 并检查了我的 session ID,我意识到当前 ID 看起来像这样 3teao7a72gcg98pgelupl1p9l3。 如果您查看旧版本的 php,他们使用 MD5 算法来散列用于 session 的数据,如果我是对的,它类似于 IP:TIMESTAMP:PHPRAND:SYSTEMRAND/strong> 散列为 MD5 构建您的 sessionid。 我检查了我的 php.ini 并查看了 Hashfunction for Session 的属性

; 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

现在我发现 Algorythm 真的代表了 PHPSESSID,我用一些哈希标识符检查它但没有得到结果,你知道一些网站我可以看看生成 PHPSESSID 的函数吗?

感谢您的帮助:)

最佳答案

如果session.hash_function为0,则为MD5。

您只是习惯于看到它是十六进制编码的,而 PHP 的 session 扩展可能会根据 session.hash_bits_per_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_bits_per_character = 4(默认值)时,这与十六进制编码相同,因此只会使用 0-9a-f 字符。但是当该值更高时,为了能够在单个字符中打包更多的数据,就需要更多的字符。

这些是可能性:

  • 4:0-9a-f 个字符(十六进制编码)
  • 5:0-9a-v 个字符
  • 6:0-9a-zA-Z,- 个字符

根据您显示的示例 ID 的长度,我认为您有 session.hash_bits_per_character = 5


所有这些不适用于 PHP 7.1+,其中:

  • session.hash_bits_per_character 替换为 session.sid_bits_per_character
  • session.hash_function 已删除,您直接提供 session.sid_length

关于用于 PHPSESSID 的 PHP 5 Hashalgorythm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40805079/

相关文章:

php - PHP 中的对象分配

php - 从 Ratchet websocket 向客户端发送消息

php - LEFT JOIN 选择条件

javascript - 使用AJAX查询MySQL数据库

javascript - PHP 邮件表单不会将输入发送到电子邮件

php - 单击提交按钮后重定向到另一个页面并传递变量

php - Ajax 响应中的杂散字符?

javascript - 获取json ajax php表单进行远程工作

php - 如何将文档转换为 PDF

php - 重定向到另一个页面