1 回答

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
似乎 Ruby 正在向 base64 編碼的字符串添加換行符,而 PHP 沒有。
紅寶石:
Base64.encode64('bonjour')
=> "Ym9uam91cg==\n"
PHP:
base64_encode('bonjour')
=> "Ym9uam91cg=="
所以現(xiàn)在我們知道如何在 PHP 中修復(fù)它:
hash_hmac('sha1', base64_encode('bonjour') . "\n", 'hello');
=> "62ac34e5d28563d6a50272d660805d1f8c791e41"
或者在 Ruby 中修復(fù)它:
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha1"),
'hello', Base64.encode64('bonjour').chomp)
=> "89ebf8bd3d92bf3283aa4c5f24072820258367e4"
第2部分
在 PHP 以及 Ruby 中,'\n'與"\n". 第一個(gè)產(chǎn)生兩個(gè)字符(\后跟n),第二個(gè)產(chǎn)生一個(gè)換行符。
因此,要修復(fù)您的代碼,您需要在字符串中使用換行符,而不是 slash+n:
$base64 = chunk_split(base64_encode($json), 60, "\n");
^^^^
您還可以使用 去除 Ruby base64 編碼字符串中的換行符gsub,這意味著您不需要在 PHP 代碼中使用任何技巧:
encoded_body = Base64.encode64(json_body).gsub("\n", '')
- 1 回答
- 0 關(guān)注
- 142 瀏覽
添加回答
舉報(bào)