如何匹配C#和Ruby中的输出形式MD5哈希字符串?

时间:2015-03-13 06:24:15

标签: c# ruby

这是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代码?非常感谢

1 个答案:

答案 0 :(得分:0)

我不是一个红宝石程序员,但你转换为十六进制的方式有问题。看起来像'0a'这样的值会呈现为'a',导致输出不正确。 Ruby已经有了一个方法,Digest::MD5.hexdigest,所以我不确定为什么有人会自己推出。

我会写ruby函数:

def getMD5Hash(str)
    return Digest::MD5.hexdigest(str.encode( 'UTF-8' ))
end