C#相当于Java的DigestUtils.md5Hex(String)?

时间:2009-10-08 21:31:04

标签: c# java md5

是否有现成的C#等同于Java的DigestUtils。md5Hex(String)?我的Java很生疏,但我可以说DigestUtils是Apache Commons Codec包的一部分,而md5Hex(String)方法基本上使用MessageDigest.getInstance(“MD5”)。

(一个相关的花絮,Java和C#代码都使用UTF8。)


在最简单的测试中,我排除了我正在使用的Java和C#算法之间的任何差异。这意味着我的问题在其他地方。但是,为了记录,这两段代码产生了相同的结果:(谢谢,Alex。)

爪哇:

private static void printMd5Hex(String data) {
    System.out.println(DigestUtils.md5Hex(data));
}

C#:

private static void printMd5Hex(string data)
{
    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
    byte[] dataHash = md5.ComputeHash(Encoding.UTF8.GetBytes(data));
    StringBuilder sb = new StringBuilder();
    foreach (byte b in dataHash)
    {
        sb.Append(b.ToString("x2").ToLower());
    }
    Console.WriteLine(sb.ToString());
}

为了正确关闭这个问题,我的问题的根源与Java代码中的错误有关,该错误用于创建被散列的“数据”的格式字符串。实质上:

string dataFormatString = "%1$s, %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, %10$s, %11$s, %12s";
string dataToHash = String.Format(dataFormatString, ...);

问题是第12个参数。它缺少一个$,这意味着数据空间填充最小为12个字符,使用第一个参数作为要格式化的数据。可悲的是,编写这个错误的开发者不再在这里工作,从而使我无法将双手缠绕在他的喉咙上。

1 个答案:

答案 0 :(得分:3)

你想在c#中计算md5吗?

System.Security.Cryptography.MD5CryptoServiceProvider x =
    new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.UTF8.GetBytes(password);
bs = x.ComputeHash(bs);
System.Text.StringBuilder s = new System.Text.StringBuilder();
foreach (byte b in bs)
{
   s.Append(b.ToString("x2").ToLower());
}
password = s.ToString();