用于验证请求的哈希参数
Hash parameters to validate request
我有一个套接字服务器,编写C++,以及一个PHP中的API客户端,用于为特殊位置注册新用户。 为了验证来自 PHP 客户端的请求,我将使用带有 HAMC 的哈希,该哈希具有只有 API 客户端和套接字服务器知道的唯一键。
PHP 客户端通过 HTTP POST 将内容作为 JSON 发送,之后套接字服务器读取并处理此内容。 这工作正常。
现在,我的问题。 我将散列三个字段: 消息(字符串) 对象 ID(整数数组) 类型(字符串)
如何为这三个字段创建一个哈希? 当我使用 JSON 时,JSON 的字符串在 PHP 和 C++(https://github.com/nlohmann/json) 或更多制表符、空格或其他任何东西中的排序是否可能不同?
仍然作为一点信息,消息可以包含任何字符。
目前我使用这个
$str = "type=".$type. ";message=".$message;
foreach ($objectIDs as $index => $objectID) {
$str .= ";objectID[" . $index . "]=" . $objectID;
}
//generate from a String a SHA256 hash with HMAC
$hash = getSignature($str);
有人告诉我,这种签名不是唯一的,应该可以通过特殊消息系统创建错误的哈希。(但目前无法联系到他) 在我的测试中,我无法重现它。 现在我希望其他人可以帮助我。
如果字符串相等,则哈希相等。
也就是说,JSON 对于哈希来说是一个糟糕的选择:语义相同的 JSON 对象可以有不同的字符串表示形式。
但是,在 Internet 上,您应该期望字符串表示形式也可能很复杂,具体取决于所涉及的两台计算机的区域设置。如果区域设置相等,则通常一切正常(在任何地方选择 UTF-8 都是有效的)。但是,我希望PHP将字符串转换为服务器的语言环境。这可以更改字符串的位表示形式(类似于 JSON 问题)。因此,请确保两者都在相同的区域设置中工作,并且这种魔法永远不会干扰您的系统。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 使用Qt C++计算类似Git的SHA1哈希
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 用C++将哈希表写入文件并从文件中恢复
- c++找不到具有相同哈希的无序集合元素
- 哈希文件递归并保存到矢量Cryptopp中
- 对 pair<pair<int,int>pair<int,int unordered_map进行哈希处理>>
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 错误:哈希函数必须可使用键类型的参数进行调用
- 哈希<T>,更少的<T>函数:模板参数后的空括号
- 用于验证请求的哈希参数
- 使用按插入方式排序的参数创建哈希映射
- C 11多态映射键静态断言失败:哈希函数必须与密钥类型的参数无关
- 如何创建可以参数化的哈希函数
- TBB 并发哈希映射模板参数
- 使用可变参数模板创建哈希队列
- 函数调用参数前的双哈希值
- multi_index哈希的唯一可选参数
- 如果我只想指定哈希函数,我应该传递给unordered_map的存储桶计数参数什么?