1 回答

TA贡献1821条经验 获得超5个赞
Ruby似乎正在向base64编码字符串添加换行符,而PHP则没有。
红宝石:
Base64.encode64('bonjour')
=> "Ym9uam91cg==\n"
菲律宾比索:
base64_encode('bonjour')
=> "Ym9uam91cg=="
所以现在我们知道如何在PHP中修复它:
hash_hmac('sha1', base64_encode('bonjour') . "\n", 'hello');
=> "62ac34e5d28563d6a50272d660805d1f8c791e41"
或者用 Ruby 修复它:
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha1"),
'hello', Base64.encode64('bonjour').chomp)
=> "89ebf8bd3d92bf3283aa4c5f24072820258367e4"
第 2 部分
在 PHP 和 Ruby 中,它与 .第一个生成两个字符(后跟 ),第二个生成换行符。'\n'"\n"\n
因此,要修复代码,您需要在字符串中使用换行符,而不是斜杠+ n:
$base64 = chunk_split(base64_encode($json), 60, "\n");
^^^^
您还可以使用 从 Ruby base64 编码字符串中去除换行符,这意味着您不需要在 PHP 代码中使用任何技巧:gsub
encoded_body = Base64.encode64(json_body).gsub("\n", '')
- 1 回答
- 0 关注
- 209 浏览
添加回答
举报