为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 和 Ruby 上的相同代码给出不同的结果

PHP 和 Ruby 上的相同代码给出不同的结果

PHP
慕村225694 2021-09-05 16:10:24
我正在尝试使用在 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 相同的结果。

因此,您需要删除truePHP 代码中的参数,以便在 PHP 中对十六进制表示进行编码,或者OpenSSL::HMAC.digest在 Ruby 中使用,以便在 Ruby 中对原始二进制数据进行编码。

此外,您trim()在 PHP 中有密钥,但.strip在 Ruby 中没有,但我认为这不是问题所在。


查看完整回答
反对 回复 2021-09-05
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信