从base64转换后,字符串的长度不同

时间:2016-03-11 13:36:08

标签: c# ruby

我有一个使用C# Convert.ToBase64String

生成的字符串

但是在使用ruby base64.decode解码相同的字符串后,字符串的长度不同,可能是什么问题。

C#编码的字符串:

dABlAHMAdAA=

ruby​​代码

name=decrypt(ARGV[0])
puts "#{name.to_s}"
puts "#{name.to_s.length}"

def decrypt(input)
  return Base64.decode64(input)
end

ruby​​ check_login.rb

dABlAHMAdAA=
test
8

3 个答案:

答案 0 :(得分:2)

  

dABlAHMAdAA =(测试)

这看起来像base64编码的UTF-16。

  

dGVzdA ==

似乎是base64编码的UTF-8(对于像“test”这样的ASCII字符串只是ASCII,因为它是UTF-8的子集 - 但不是UTF-16的子集。)

所以原始字符用不同的方案编码,然后实际的字节是base64编码的。

答案 1 :(得分:0)

解码 Ruby提供的字符串(因此我们将 C#改编为 Ruby

  String source = "dABlAHMAdAA=";
  // test
  String result = Encoding.Unicode.GetString(Convert.FromBase64String(source));

进行编码(以便Ruby可以读取它)

  String source = "test";
  // dABlAHMAdAA=
  String result = Convert.ToBase64String(Encoding.Unicode.GetBytes(source));

在两种情况下,注意Encoding.Unicode代表UTF-16

答案 2 :(得分:0)

适用于ASCII的Hack:

Base64.decode64('dABlAHMAdAA=').delete "\u0000"
#⇒ "test"