Я пытаюсь портировать программу на Python на C #. Вот строка, которая должна быть прохождением, но в настоящее время мучает меня:
hash = hashlib.md5(inputstring).digest()
После генерации аналогичного хеша MD5 в c # крайне важно, чтобы я создал строку хеша, аналогичную исходной программе на python, иначе все мое приложение потерпит неудачу.
Моя путаница заключается в том, какую кодировку использовать при преобразовании в строку в c #, т.е.
?Encoding enc = new ?Encoding();
string Hash =enc.GetString(HashBytes); //HashBytes is my generated hash
Потому что я не могу создать два одинаковых хэша при использовании Encoding.Default i.e
string Hash = Encoding.Default.GetString(HashBytes);
Поэтому я думаю, что знание кодировки hash.digest () по умолчанию для python поможет
ИЗМЕНИТЬ
Хорошо, может быть, еще немного кода сформулирует мою проблему больше. После вычисления хеша в программе python выполняются некоторые вычисления, т.е.
hash = hashlib.md5(inputstring).digest()
for i in range(0,6):
value += ord(hash[i])
return value
Теперь вы понимаете, почему две разные строки Hash будут проблематичными? Некоторые символы, которые появляются при запуске программы на Python, заменяются на «?» в C #.
3 ответа
Я предполагаю, что вы используете более раннюю версию Python, чем 3, и ваша строка нормальная str
.
Если вы говорите о выводе, метод дайджеста возвращает строку, состоящую из необработанных байтов. Эквивалентный тип в C # - byte[]
, который у вас уже есть. Это не текст, поэтому использование класса Encoding не имеет смысла.
Если вы говорите о вводе, функция md5
принимает нормальный str
, который представляет собой строку байтов. Вы должны посмотреть на код перед этим, чтобы выяснить, в какой кодировке находятся данные.
Изменить:
Что касается кода, который вы разместили, все, что он делает, это берет значения шести первых байтов в хэше и складывает их вместе. Вы должны быть в состоянии понять, как это сделать в C #.
И убедитесь, что вы узнали разницу между строкой байтов и строкой символов .
Он вообще не кодируется, это просто массив байтов на обоих языках.
Согласно документации, строки Python по умолчанию являются ASCII. Альтернативные кодировки должны быть явно указаны. Следовательно, вы должны иметь возможность передавать строку ASCII в библиотеку C # MD5 и получать те же байты хеша, как если бы вы передавали эту строку в библиотеку Python MD5.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.