我有一个使用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
答案 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"