我正在尝试使用在 PHP 上编写的示例来实现签名计算。但是这些代码返回不同的结果。PHP示例:base64_encode(hash_hmac('sha384', $message, trim($key), true))红宝石代码:hmac_hash = OpenSSL::HMAC.hexdigest("SHA384", key, message)signature = Base64.encode64(hmac_hash)这里的消息变量是 JSON。
1 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
OpenSSL::HMAC.hexdigest
在 Ruby 中输出一个十六进制字符串,这就是 base64 编码的内容。在您的 PHP 代码中,true
参数hash_hmac
使其输出原始二进制数据。没有它,它将是十六进制,我认为这将导致与 Ruby 相同的结果。
因此,您需要删除true
PHP 代码中的参数,以便在 PHP 中对十六进制表示进行编码,或者OpenSSL::HMAC.digest
在 Ruby 中使用,以便在 Ruby 中对原始二进制数据进行编码。
此外,您trim()
在 PHP 中有密钥,但.strip
在 Ruby 中没有,但我认为这不是问题所在。
- 1 回答
- 0 关注
- 118 浏览
添加回答
举报
0/150
提交
取消