【问题标题】:Base64 encode with no padding on ruby 2.2在 ruby​​ 2.2 上无填充的 Base64 编码
【发布时间】:2016-05-20 10:00:57
【问题描述】:

我正在尝试在 ruby​​ 2.2(环境限制)中对一些东西进行 base64 编码而不进行填充。我知道在 ruby​​ 2.3 中,base64 库添加了一个填充标志,可以为我做到这一点。但是,当我尝试自己在 ruby​​ 2.2 中使用

Base64.urlsafe_encode464(str).gsub('=', '')

然而,这给我带来了解码时的问题。有没有办法在保持 ruby​​ 2.2 的同时更新到最新的 base64 库?或者有没有一种好方法来做一个可以正确解码的 urlsafe base64 编码?

【问题讨论】:

  • 有什么问题?在 ruby​​ 2.2.4 Base64.decode64(Base64.encode64('Send reinforcements').gsub('=', '')) => "Send reinforcements" 上为我工作
  • 还有urlsafe_encode64
  • 这与较长的随机字节字符串(如键)无法正常工作有关。我能够抽象出 Ruby 2.3 base64 方法并使用它们,这很有效。

标签: ruby base64


【解决方案1】:

MRI Ruby 版本

以下 Ruby 错误报告显示了在 Ruby 2.3 及更高版本中支持移除填充和解码的更改历史记录。但是,如果您尝试使用在旧版 Ruby 中添加的“填充”参数,则会失败并显示 ArgumentError。这使得在新旧 Ruby 中支持无填充编码/解码变得很困难。

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

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

https://github.com/nojima/base64url

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多