【问题标题】:Strict Base64 encoding严格的 Base64 编码
【发布时间】:2020-10-02 02:43:38
【问题描述】:

我正在开发一个使用以下 Base64 解码方法的项目(编辑:这些是 Ruby Base64 库中的方法,为了清楚起见,我只是在这里展示它们的实现):

def urlsafe_decode64(str)
  str = str.tr("-_", "+/")
  if !str.end_with?("=") && str.length % 4 != 0
    str = str.ljust((str.length + 3) & ~3, "=")
  end
  strict_decode64(str)
end

def strict_decode64(str)
  str.unpack1("m0")
end

unpack1(还没有找到pack_unpack_internal):

static VALUE
pack_unpack1(VALUE str, VALUE fmt)
{
    return pack_unpack_internal(str, fmt, UNPACK_1);
}

我正在尝试编写一个正则表达式来验证传入的 Base64 编码字符串以避免“无效的 base64”错误。这是正则表达式(长度为四的倍数,仅限字母数字/+/-,末尾有 0-2 个填充 = 字符):

/^(?:([A-Za-z0-9+\/]){4})*(?:([A-Za-z0-9+\/]){2}==|([A-Za-z0-9+\/]){3}=|([A-Za-z0-9+\/]){4})$/

我自己的测试验证了此正则表达式检查是否按预期工作。但是,一些通过此检查的字符串仍然会在解码中产生错误。

例如,“cg==”解码没有问题,但“cd==”返回“invalid base64”错误。

似乎只有某些字母组合实际上是有效的 Base64,但我无法在网上找到任何东西来验证这一点。

有没有人可以使用这种严格编码的正则表达式?

【问题讨论】:

  • 是否有理由滚动您自己的 URL 安全编码/解码,而不是使用 Ruby 标准库中的 Base64 模块?
  • 只有某些字母组合实际上是有效的 Base64 - 从未听说过
  • mlockerd,这些方法来自 Ruby 标准库的 Base64 模块。我只是在这里展示了他们的实现,以防万一。

标签: ruby-on-rails regex base64


【解决方案1】:

FWIW,我的一位更资深的同事说,尝试通过 RegExp 验证 Base64 确实不是一个好主意,因为这全都与位/大小有关……而且验证某事物是否是正确的 Base64 编码的唯一真正方法字符串是解码它。 :-}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多