这是C#的代码
public static string GetMD5Hash(string input)
{
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
bs = x.ComputeHash(bs);
System.Text.StringBuilder s = new System.Text.StringBuilder();
foreach (byte b in bs)
{
s.Append(b.ToString("x2").ToLower());
}
return s.ToString();
}
这是Ruby的代码
def getMD5Hash(str)
bs = Digest::MD5.digest( str.encode( 'UTF-8' ) ).bytes.to_a
bs = bs.map { |b| b.to_s(16).downcase }
str_bs = bs.join
return str_bs
end
当我运行ruby代码和C#代码来加密相同的字符串时,Ruby的结果与C#提供的结果不同。 如何修改Ruby代码?非常感谢
答案 0 :(得分:0)
我不是一个红宝石程序员,但你转换为十六进制的方式有问题。看起来像'0a'这样的值会呈现为'a',导致输出不正确。 Ruby已经有了一个方法,Digest::MD5.hexdigest
,所以我不确定为什么有人会自己推出。
我会写ruby函数:
def getMD5Hash(str)
return Digest::MD5.hexdigest(str.encode( 'UTF-8' ))
end