2016-12-10 2 views
-1

У меня проблема с StringBuilder, которая не работает должным образом при использовании несколько раз. Вот пример, когда я делаю строку из байтового массива хэша.StringBuilder используется несколько раз не работает

StringBuilder stringBuilder = new StringBuilder(); 

//MD5 
MD5 Md5 = MD5.Create(); 
foreach (byte b in Md5.ComputeHash(exeStream)) 
    stringBuilder.AppendFormat("{0:X2}", b); 

CompareHashValueMd5 = stringBuilder.ToString().ToLower(); 
stringBuilder.Clear(); 


// SHA1 
SHA1Managed SHhash = new SHA1Managed(); 
foreach (byte b in SHhash.ComputeHash(exeStream)) 
    stringBuilder.AppendFormat("{0:X2}", b); 

CompareHashValueSha = stringBuilder.ToString().ToLower(); 
stringBuilder.Clear(); 

// SHA256  
SHA256Managed SHhash256 = new SHA256Managed(); 
foreach (byte b in SHhash256.ComputeHash(exeStream)) 
    stringBuilder.AppendFormat("{0:X2}", b); 

CompareHashValueSha256 = stringBuilder.ToString().ToLower(); 
stringBuilder.Clear(); 

Результаты:

MD5: ПРАВИЛЬНО

SHA1: НЕПРАВИЛЬНО

SHA256: НЕПРАВИЛЬНО

Когда я удалить MD5 и запустить программу снова SHA1 отлично но SHA256 - нет. Поэтому я предполагаю, что проблема заключается в повторном использовании stringBuilder. Любая идея, что с этим делать? Спасибо

+0

Хек, решение даже прямо там, в [пример на MSDN] (https://msdn.microsoft.com/en-us/library/xa627k19 (v = vs.110) .aspx) –

ответ

1

Это не повторное использование StringBuilder, это повторное использование того же Stream без перематывания.

Сохраните свойство Position перед каждым вычислением хэша и установите его обратно до следующего.