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 關注
- 197 瀏覽
添加回答
舉報