2016-12-10 37 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屬性,並在下一個散列計算之前將其設置回來。