У меня есть метод хэша MD5 следующий образом:MD5 хэш-разному на локальных машинах
MD5 md5 = System.Security.Cryptography.MD5.Create();
StringBuilder sb = new StringBuilder();
lock (md5)
{
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("X2").ToString(CultureInfo.InvariantCulture));
}
}
return sb.ToString();
На нескольких локальных Девых машин, использующих один и тот же входной сигнал, это возвращает тот же хэш. На промежуточных и живых серверах он возвращает ожидаемое значение.
Однако на нескольких локальных машинах разработки значения различаются. И я не могу понять, почему?
Я добавил lock
и CultureInfo
в ответ на некоторые другие ответы здесь .. но, увы. Ничего.
Любая помощь очень ценится в этом вопросе!
UPDATE:
я добрался до места, где я сравнивал массив inputBytes на «хорошей» против «плохой» машины и массивы идентичны.
И что, если что-нибудь, может ли метод ComputeHash работать по-разному между машинами? Я чувствую, что это не основная проблема. Но в этот момент хеш возвращается к другому. Я в недоумении.
вы на 100% уверены, что ваши данные совпадают? Я знаю, что это досадный вопрос, но это было бы первое, что я проверил, если бы у меня была эта проблема. –
Согласен с @Bartdude. Также, возможно, большой/маленький эндиан? Разница ОС? Модификация сканера? Возьмите файл с «плохой машины» и скопируйте его обратно на одну из подходящих машин. Посмотрите, что произойдет. –
Как @Bartdude, я также подозрительно отношусь к вводу. Дважды проверьте, что вход всегда имеет одинаковую кодировку и так далее на всех машинах. Независимо от того, является ли сам метод культуральным инвариантом, не имеет значения, если вход не совпадает. – Smallhacker