Я очень мало знаю об шифровании/хешировании.Java MD5 хеширование не соответствует хешированию C# MD5
У меня есть hash ключ шифрования. Пример в Java, как это ...
String encryptionKey = "test";
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(encryptionKey.getBytes("UTF-8"), 0, encryptionKey.length());
byte[] encryptionKeyBytes = messageDigest.digest();
Теперь исправьте меня, если я ошибаюсь, но приведенный выше код хэш строки с алгоритмом MD5.
И я хочу тот же результат, когда у меня есть одна и та же строка в C#.
Мой текущий C# код выглядит следующим образом ...
string encryptionKey = "test";
var md5 = MD5.Create();
var keyBytes = Encoding.UTF8.GetBytes(encryptionKey);
byte[] encryptionKeyBytes = md5.ComputeHash(keyBytes);
Но результаты конца байта не совпадают.
Java получает ...
[0] 9
[1] -113
[2] 107
[3] -51
[4] 70
[5] 33
[6] -45
[7] 115
[8] -54
[9] -34
[10] 78
[11] -125
[12] 38
[13] 39
[14] -76
[15] -10
C# получает ...
[0] 9 byte
[1] 143 byte
[2] 107 byte
[3] 205 byte
[4] 70 byte
[5] 33 byte
[6] 211 byte
[7] 115 byte
[8] 202 byte
[9] 222 byte
[10] 78 byte
[11] 131 byte
[12] 38 byte
[13] 39 byte
[14] 180 byte
[15] 246 byte
мне нужен мой C# код, чтобы получить тот же результат, что и код Java (а не наоборот), есть идеи?
спасибо.
Байты Java подписаны. C# байтов нет. Обратите внимание, что только места, где байт Java отрицательный, это неправильно. – vcsjones
Кроме того, у вас есть довольно плохая ошибка в java-коде: 'encryptionKey.getBytes (« UTF-8 »), 0, encryptionKey.length()' Я оставляю это вам, чтобы понять, что такое ошибка. Последнее сравнение прямого строкового представления (toString) всегда плохое. – bestsss
@bestsss Я использую точку останова для проверки значений. Я думаю, что значения точки останова производятся из представления toString (может быть, и не так). Как вы собираетесь сравнивать байтовые значения? – Theo