Мое приложение имеет функцию автоматического обновления. Чтобы проверить, успешно ли он загрузил файл, я сравниваю два хэша, один с xml и хэш, сгенерированный после загрузки. Два хэша одинаковы, но он бросает меня, что два хэша не одинаковы. Когда я проверяю размер, хэш-строка xml имеет 66, а другая - 36. Я использую метод обрезки, но до сих пор не повезло.строка неравнозначная на самом деле равна
string file = ((string[])e.Argument)[0];
string updateMD5 = "--"+((string[])e.Argument)[1].ToUpper()+"--";
string xx="--"+Hasher.HashFile(file, HashType.MD5).ToUpper()+"--";
// Hash the file and compare to the hash in the update xml
int xxx = (updateMD5.Trim()).Length;
int xxxxx = xx.Trim().Length;
if (String.Equals(updateMD5.Trim(), xx.Trim(), StringComparison.InvariantCultureIgnoreCase))
e.Result = DialogResult.OK;
else
e.Result = DialogResult.No;
мясорубка код
internal static string HashFile(string filePath, HashType algo)
{
switch (algo)
{
case HashType.MD5:
return MakeHashString(MD5.Create().ComputeHash(new FileStream(filePath, FileMode.Open)));
case HashType.SHA1:
return MakeHashString(SHA1.Create().ComputeHash(new FileStream(filePath, FileMode.Open)));
case HashType.SHA512:
return MakeHashString(SHA512.Create().ComputeHash(new FileStream(filePath, FileMode.Open)));
default:
return "";
}
}
private static string MakeHashString(byte[] hash)
{
StringBuilder s = new StringBuilder();
foreach (byte b in hash)
s.Append(b.ToString("x2").ToLower());
return s.ToString();
}
Примечание: Я использую '-', чтобы проверить, если есть трейлинг пространство
StringBuilder s=new StringBuilder();
foreach (char c in updateMD5.Trim())
s.AppendLine(string.Format("{0}=={1}",c,(int)c));
Пожалуйста, укажите [mcve] как текст – Sayse
Очевидно, что существует несоответствие между вещами, которые вы показываете здесь, строка слева явно не содержит 66 символов. Пожалуйста, убедитесь, что вы смотрите на правильные вещи. –
Пользовательский класс «Хашер»? Предоставьте также свою функцию. – Prisoner