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

OpenSSL::HMAC.hexdigest PHP 等效物不会打印与 ruby 相同的结果

OpenSSL::HMAC.hexdigest PHP 等效物不会打印与 ruby 相同的结果

PHP
肥皂起泡泡 2022-08-05 16:35:32
这是一个我需要转换为PHP的Ruby代码:print OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha1"), 'hello', Base64.encode64('bonjour'))输出:62ac34e5d28563d6a50272d660805d1f8c791e41这是我的PHP代码:echo hash_hmac('sha1', base64_encode('bonjour'), 'hello');输出:89ebf8bd3d92bf3283aa4c5f24072820258367e4我找不到一种方法来拥有.62ac34...我也试过:echo hash_hmac('sha1', 'bonjour', 'hello'); // 1echo hash_hmac('sha1', 'hello', 'bonjour'); // 2echo hash_hmac('sha1', base64_encode('hello'), 'bonjour'); // 3echo hash_hmac('sha1', 'hello', base64_encode('bonjour')); // 4echo base64_encode(hash_hmac('sha1', 'hello', 'bonjour', TRUE)); //5这也是错误的。输出:bed443484cc49c41c053a11dd15e44d4f79c524f // 116923f8d6e9afd345cf947fc963cad73aa12b76c // 28e5989976296c76f0462fe33c6bc2dec48bdcb5a // 3ca237e79f77e6d9739db45fc5d162da3a4036639 // 4FpI/jW6a/TRc+Uf8ljytc6oSt2w= // 5我完全绝望了。
查看完整描述

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", '')


查看完整回答
反对 回复 2022-08-05
  • 1 回答
  • 0 关注
  • 209 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号