最佳答案
Ruby 中内置的 Base64库正在添加一些 n。我找不出原因。这个特殊的例子是:
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'base64'
=> true
irb(main):003:0> str = "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
=> "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
irb(main):004:0> Base64.encode64(str)
=> "MTExMC0tYWQ2Y2EwYjA2ZTFmYmViN2U2NTE4YTA0MThhNzNhNmUwNGE2NzA1\nNA==\n"
N 在最后一个位置,从末尾到第六个位置。解码器(Base64.decde64)完美地返回旧字符串。奇怪的是,这些 n 没有给编码后的字符串增加任何值。当我从输出字符串中删除换行符时,解码器再次完美地解码它。
irb(main):005:0> Base64.decode64(Base64.encode64(str).gsub("\n", '')) == str
=> true
除此之外,我还使用了另一个 JS 库来生成相同输入字符串的 base64编码输出,输出中没有 n。
这是漏洞还是其他什么? 以前有人遇到过这个问题吗?
仅供参考,
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]