加上登录Base64.encode64输出?

Mat*_*ham 4 ruby python

我正在使用Base64.encode64从API请求(我没有开发的API)中使用的HMAC创建哈希.生成的哈希有时包括"+".包含"+"的请求失败.请求没有成功.

例如,Python中的相同类型的脚本在Base64编码的哈希中从不会有"+".

以下是两个片段.同样,Python从来没有"+",Ruby有时会这样做.

有什么想法发生了什么?如何保持Ruby的base64编码不使用"+"字符?

红宝石:

hmac = OpenSSL::HMAC.digest('sha256', hmackey, request_string)
signature = URI::encode(Base64.encode64(hmac))
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

hmac = hmac.new(self.hmackey, urltosign, digestmod=hashlib.sha256).digest()
signature = base64.b64encode(hmac)
Run Code Online (Sandbox Code Playgroud)

Sab*_*san 7

Python使用RFC 3548进行base64转换.其他语言如Ruby,Java(可能是RFC 2045),他们可能会使用不同的RFC进行转换.因此,您可能会发现很少有人正在使用/,很少有人使用+他们的编码字符串

因此,如果您需要与它们匹配,只需在编码后替换等效的字符.


Tob*_*oby 5

添加到@Sabuj Hassan 的精彩回答中。

在 Ruby 中,您可以Base64.urlsafe_encode64遵守 RFC 4648,这似乎更普遍有用。

文档

返回 bin 的 Base64 编码版本。此方法符合 RFC 4648 中的“Base 64 Encoding with URL and Filename Safe Alphabet”。字母表使用“-”代替“+”和“_”代替“/”。