php - 我需要将一段 RUBY 转换为 PHP,我需要关于它为什么不起作用的建议
问题描述
重申一下,我得到了以下 RUBY 代码,我需要将其转换为 PHP。我以为我理解了,但是我想出的 PHP 代码没有生成它应该从标题中匹配的字符串。
digest = OpenSSL::Digest::Digest.new('sha256')
calculated_hmac = Base64.encode64(OpenSSL::HMAC.digest(digest, YOUR_SIGNING_KEY_SECRET, request.raw_post)).strip
calculated_hmac == request.headers["HTTP_X_SENDOWL_HMAC_SHA256"]
这就是我想出的 PHP 等价物,但没有产生预期值。
$keySecret = [REDACTED SECRET KEY];
$raw_post = file_get_contents('php://input');
$calculated = base64_encode(hash_hmac('sha256',$raw_post,$keySecret,true));
$receivedHeaders = getallheaders();
If ($receivedHeaders['X_sendowl_hmac_sha256'] != $calculated)
{
write_log('Failed matching Headers');
write_log('Received: '.$receivedHeaders['X_sendowl_hmac_sha256']);
write_log('Calculated: '.$calculated);
die('an all too early demise');
}
主动回答几个问题:
#1) 是的,尽管示例是全大写,但我确实在 php 代码中获得了带有该大写字母的标头值。它只是与计算版本不匹配。
#2) 我已经尝试过让hash_hmac返回一个二进制文件(由最终的“true”参数指定)并让它返回其默认值,后者产生一个比标题中的字符串长得多的最终字符串,所以它必须是二进制格式
#3) 我已经验证$raw_post字符串的长度与标头中的Content-Length相同,所以我知道我拥有整个原始帖子,除非 RUBY request.raw_post函数也返回标头信息
提前感谢您的帮助!
所以,我的问题是,我是否遗漏了什么或做了什么明显错误的事情——如果是,请告诉我是什么——或者我应该回到那个人那里
解决方案
推荐阅读
- android - Facebook 广告 + GDPR 合规性
- python - 如何决定我应该使用哪个类标签来使用scrapy从网站上抓取数据
- python - 在二维数组中最快搜索大于 0 的值
- django - Django REST Framework - 将额外参数传递给操作
- java - 如何在 libgdx-InputProcess 中使用放大功能?
- c# - 使用 oledb 在 c# 中获取访问数据范围
- javascript - 如何将 2 个 javascript 数组从 laravel 视图传递到 laravel 控制器?
- ios - 如何在按钮单击时在一个视图控制器上显示不同的视图
- angularjs - 使用 ng-repeat 创建一个包含 1…N 的列标题数组
- java - 匿名类中的执行顺序