垃圾Base64解码的字符串

时间:2019-10-08 12:53:37

标签: ruby linux encryption base64

有人可以解释一下,为什么会有两个不同的输出?

代码输入IRB(交互式红宝石外壳):

irb(main):001:0> require 'base64'
=> true 
irb(main):002:0> cookie = "YXNkZmctLTBEAiAvi95NGgcgk1W0pyUKXFEo6IuEvdxhmrfLqNVpskDv5AIgVn8wfIWf0y41cb%2Bx9I0ah%2F4BIIeRJ54nX2qGcxw567Y%3D"
=> "YXNkZmctLTBEAiAvi95NGgcgk1W0pyUKXFEo6IuEvdxhmrfLqNVpskDv5AIgVn8wfIWf0y41cb%2Bx9I0ah%2F4BIIeRJ54nX2qGcxw567Y%3D" 
irb(main):003:0> decoded_cookie = Base64.urlsafe_decode64(URI.decode(cookie))
=> "asdfg--0D\x02 /\x8B\xDEM\x1A\a \x93U\xB4\xA7%\n\\Q(\xE8\x8B\x84\xBD\xDCa\x9A\xB7\xCB\xA8\xD5i\xB2@\xEF\xE4\x02 V\x7F0|\x85\x9F\xD3.5q\xBF\xB1\xF4\x8D\x1A\x87\xFE\x01 \x87\x91'\x9E'_j\x86s\x1C9\xEB\xB6"

来自Linux终端的代码:

asd@asd:~# ruby script.rb
asdfg--0D /��M� �U��%
\Q(苄��a��˨�i�@�� V0|���.5q������ ��'�'_j�s9�

脚本:

require 'base64'
require 'ecdsa'
cookie = "YXNkZmctLTBEAiAvi95NGgcgk1W0pyUKXFEo6IuEvdxhmrfLqNVpskDv5AIgVn8wfIWf0y41cb%2Bx9I0ah%2F4BIIeRJ54nX2qGcxw567Y%3D"

def decode_cookie(cookie)
  decoded_cookie = Base64.urlsafe_decode64(URI.decode(cookie))
end

puts (decode_cookie(cookie))

我如何在终端中获得相同的输出? 我需要输出:

  

“ asdfg--0D \ x02 / \ x8B \ xDEM \ x1A \ a \ x93U \ xB4 \ xA7%\ n \ Q(\ xE8 \ x8B \ x84 \ xBD \ xDCa \ x9A \ xB7 \ xCB \ xA8 \ xD5i \ xB2 @ \ xEF \ xE4 \ x02 V \ x7F0 | \ x85 \ x9F \ xD3.5q \ xBF \ xB1 \ xF4 \ x8D \ x1A \ x87 \ xFE \ x01 \ x87 \ x91'\ x9E'_j \ x86s \ x1C9 \ xEB \ xB6“

在Linux终端中。

1 个答案:

答案 0 :(得分:0)

"\x8B"这样的字符串代表字符,而不是文字\x8B。如果Ruby缺少用于显示字符的字体,或者它与白色间距混淆(例如"\n"是换行符,而不是\后跟n),则Ruby使用这种表示形式。

在irb中获得另一个输出的原因是因为您没有使用puts打印字符串(就像您在脚本中一样)。只需调用decoded_cookie即可返回字符串表示形式,而不是实际内容。

您可以通过将实际内容打印到输出中来显示实际内容。

require 'base64'

cookie = "YXNkZmctLTBEAiAvi95NGgcgk1W0pyUKXFEo6IuEvdxhmrfLqNVpskDv5AIgVn8wfIWf0y41cb%2Bx9I0ah%2F4BIIeRJ54nX2qGcxw567Y%3D"
decoded_cookie = Base64.urlsafe_decode64(URI.decode(cookie))
puts decoded_cookie
# asdfg--0D /��M �U��%
# \Q(苄��a��˨�i�@�� V0|���.5q����� ��'�'_j�s9�
#=> nil

您可以找到有关"\xnn"表示形式here的更多信息。

如果您希望脚本显示字符串表示形式,请使用p而不是puts,或使用puts decoded_cookie.inspect