Ruby on rails 在RubyonRails中使用base64_编码和hash_hmac生成签名

Ruby on rails 在RubyonRails中使用base64_编码和hash_hmac生成签名,ruby-on-rails,ruby,ruby-on-rails-3,hmac,hmacsha1,Ruby On Rails,Ruby,Ruby On Rails 3,Hmac,Hmacsha1,我正在将PHP代码转换为Rails代码,并且我面临使用base64_编码和hash_mac生成签名的问题。php中生成的签名长度为48,而Rails中生成的签名长度不同,但是固定的 例如,在PHP中,签名是Jth7QaN%2F2eCMZxqjZRP%2FZ%2F%2FtKcHHkGf%2f6xb8xpvp3i%3D 在rails中是4ZC7dPRWHl6%2BzDcw9pDnfo2MMRCMNSvTZ8a7a6iPo6Q%3D%0A 如何将下面的代码转换为Rails PHP代码: return

我正在将PHP代码转换为Rails代码,并且我面临使用base64_编码和hash_mac生成签名的问题。php中生成的签名长度为48,而Rails中生成的签名长度不同,但是固定的

例如,在PHP中,签名是
Jth7QaN%2F2eCMZxqjZRP%2FZ%2F%2FtKcHHkGf%2f6xb8xpvp3i%3D

在rails中是
4ZC7dPRWHl6%2BzDcw9pDnfo2MMRCMNSvTZ8a7a6iPo6Q%3D%0A

如何将下面的代码转换为Rails

PHP代码:

return base64_encode(
    hash_hmac('sha256', $data, $key, true)
);
下面是我正在使用的Rails代码,但生成的信号长度不同

Rails代码:

signature_val = Base64.encode64(OpenSSL::HMAC.digest('sha256', key, data))
谁能帮我把PHP代码转换成正确的Rails代码,这样我就可以正确地生成签名了


谢谢。

如果要模拟
hmac
true
部分(第四个参数),可以使用下一行:

下一行是
false

OpenSSL::HMAC.hexdigest(digest, key, data)
在哪里


资源是

签名不应更改长度,固定长度摘要是(部分)要点。你能举例说明你得到的长度不同吗?另外,您在PHP中使用的是什么哈希算法,也是SHA256吗?您好,您是正确的,摘要长度是固定的,是的,PHP也使用SHA256。根据我的问题进行了编辑,它们有什么不同?我得到了相同的结果,只是Ruby在末尾添加了一个换行符。(尝试
Base64.strict_encode
让Ruby不添加换行符)。这就是我在Ruby 4ZC7dPRWHl6%2BzDcw9pDnfo2MMRCMNSvTZ8a7a6iPo6Q%3D%0A中得到的,这是php Jth7QaN%2f2cmzxqjzrp%2FZ%2F%2FtKcHHkGf%2f6xb8xpvp3i%3D
encode64
不会在输出中给你
%
OpenSSL::HMAC.hexdigest(digest, key, data)
key = 'key'
data = 'The quick brown fox jumps over the lazy dog'
digest = OpenSSL::Digest.new('sha1') # replace sha1 with whatever you want