Ruby CryptoJS Base64 stringify版本

问题描述 投票:0回答:1

我正在尝试从JavaScript示例中创建一些ruby代码。

const hmac = crypto.HmacSHA1(signature, secret); // 58132bfd8761cac6e6888124753adfda13fb49f0
CryptoJS.enc.Base64.stringify(hmac); // WBMr/YdhysbmiIEkdTrf2hP7SfA=
hmac = OpenSSL::HMAC.hexdigest('sha1', secret, signature) # 58132bfd8761cac6e6888124753adfda13fb49f0
Base64.encode64(hmac) # NTgxMzJiZmQ4NzYxY2FjNmU2ODg4MTI0NzUzYWRmZGExM2ZiNDlmMA==

crypto-js stringify [1]输出与ruby版本[2]不同。

[1] https://github.com/brix/crypto-js/blob/develop/src/enc-base64.js#L25

[2] https://ruby-doc.org/stdlib-2.7.0/libdoc/base64/rdoc/Base64.html#method-i-encode64

ruby base64 encode hmac cryptojs
1个回答
0
投票

hexdigest已返回字符串表示形式。您必须改为编码二进制digest

secret = 'NzAwZmIwMGQ0YTJiNDhkMzZjYzc3YjQ5OGQyYWMzOTI='
signature = "date: Mon, 25 Jul 2016 16:36:07 GMT\nx-mod-nonce: 28154b2-9c62b93cc22a-24c9e2-5536d7d"

hmac = OpenSSL::HMAC.digest('sha1', secret, signature)
#=> "X\x13+\xFD\x87a\xCA\xC6\xE6\x88\x81$u:\xDF\xDA\x13\xFBI\xF0"

Base64.strict_encode64(hmac)
#=> "WBMr/YdhysbmiIEkdTrf2hP7SfA="
© www.soinside.com 2019 - 2024. All rights reserved.