Base64编码,在ruby 2.2上没有填充

时间:2016-02-10 06:50:46

标签: ruby base64

我试图在没有填充的情况下对ruby 2.2(环境限制)中的某些内容进行base64编码。我知道在ruby 2.3中,base64库添加了一个padding标志,可以为我做这个。但是,当我尝试使用

在ruby 2.2中自己这样做时
Base64.urlsafe_encode464(str).gsub('=', '')

然而,这在解码时会给我带来问题。有没有办法在继续使用ruby 2.2时更新到最新的base64库?或者有一个很好的方法来做一个能正确解码的urlsafe base64编码吗?

1 个答案:

答案 0 :(得分:0)

MRI Ruby版本< 2.3.x不支持在没有填充的情况下解码Base64内容(编码内容最初具有填充内容)。

以下Ruby错误报告显示了在没有Ruby 2.3及更高版本的情况下支持删除填充和解码的更改历史记录。但是,如果您尝试使用旧版本Ruby中添加的“填充”arg,则会失败并出现ArgumentError。这使得很难在较旧和较新的Rubies上支持无填充编码/解码。

https://bugs.ruby-lang.org/issues/10740

我发现一个很好的解决方案是'base64url'gem,它适用于Ruby版本,并根据需要在编码/解码时自动删除和重新添加填充。它轻巧,只有大约11行代码。

https://github.com/nojima/base64url