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

我正在尝试使用在 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。


慕村225694
浏览 124回答 1
1回答

繁华开满天机

OpenSSL::HMAC.hexdigest在 Ruby 中输出一个十六进制字符串,这就是 base64 编码的内容。在您的 PHP 代码中,true参数hash_hmac使其输出原始二进制数据。没有它,它将是十六进制,我认为这将导致与 Ruby 相同的结果。因此,您需要删除truePHP 代码中的参数,以便在 PHP 中对十六进制表示进行编码,或者OpenSSL::HMAC.digest在 Ruby 中使用,以便在 Ruby 中对原始二进制数据进行编码。此外,您trim()在 PHP 中有密钥,但.strip在 Ruby 中没有,但我认为这不是问题所在。
打开App,查看更多内容
随时随地看视频慕课网APP