В настоящее время я работаю над проектом по преобразованию программы Python 3.2 в C#.
В программе python есть строка кода, которая возвращает строковый объект двойной длины, содержащий только шестнадцатеричные цифры.
Фрагмент кода в программе Python:
if sha1.hexdigest().upper() == hash_string:
#do whatever
Я пытался и не смог найти эквивалент hexdigest в С# из хэш-библиотеки в python.
В C# у меня уже есть хеш SHA1 в массиве байтов, но все методы, которые я пытался выполнить, эквивалентные шестнадцатеричному дайджесту, не смогли обеспечить совпадение с хэш_строкой - это то, что шестнадцатеричный дайджест sha1 должен совпадают.
Я не уверен, в чем проблема: в методе, который я использую для эмуляции hexdigest, или в методе, который я использую для создания хэша sha1, поэтому было бы замечательно, если бы у кого-нибудь был метод hexdigest, который они know работает, так как это позволит мне устранить хотя бы одну возможную причину проблемы.
Метод, который я сейчас использую вместо hexdigest:
string hexaHash = "";
foreach (byte b in sha1result)
{
hexaHash += String.Format("{0:x2}", b);
}
string result = hexaHash;
РЕДАКТИРОВАТЬ: facepalm хорошо, я только что понял, в чем была моя проблема. При генерации хэша sha1 в питоне он делал это из шестнадцатеричной строки нижнего регистра. В моем С# это была шестнадцатеричная строка в верхнем регистре. Поэтому я предполагаю, что эквивалент hexdigest, который я использую, в порядке. Извините за потраченное время людей.
localValue.ToUpper() == externalValue.ToUpper()
- person sll   schedule 05.04.2012