Есть ли готовый C #, эквивалентный Java DigestUtils .md5Hex (String)? Мой Java ржавый, но я могу сказать, что DigestUtils является частью пакета кодека Apache Commons, а метод md5Hex (String) по существу использует MessageDigest.getInstance ("MD5").
(Один связанный бит, и код Java, и код C # используют UTF8.)
В простейших тестах я исключил разницу между алгоритмами Java и C #, которые я использую. Это означает, что моя проблема в другом месте. Но, к сведению, эти два фрагмента кода дают одинаковые результаты: (Спасибо, Алекс.)
Java:
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 символов, используя первый аргумент в качестве данных для форматирования. К сожалению, разработчик, который написал ошибку, здесь больше не работает, что лишает меня возможности обхватить руками его горло.