2016-12-10 1 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:

INCORRECT私はMD5を削除し、プログラムを実行すると、再びSHA1で結構ですSHA256はそうではありません。だから私は問題は、stringBuilderの再利用であると思う。どのようなアイデアをこれとどうしたらいいですか?ありがとう

+0

[MSDNの例](https://msdn.microsoft.com/en-us/library/xa627k19(v = vs.110).aspx)に解決策があります。 –

答えて

1

これは問題であるStringBuilder再利用ではありません。巻き戻さずに同じStreamを繰り返し使用しています。

各ハッシュ計算の前にPositionプロパティを保存し、次の値の前に戻します。

関連する問題