亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 197 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號