StringBuilder多次使用不起作用

时间:2016-12-10 18:47:34

标签: c# .net stringbuilder

我遇到了StringBuilder的问题,多次使用时它无法正常工作。这是一个我从hash的字节数组中创建字符串的例子。

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:INCORRECT

SHA256:不正确

当我删除MD5并再次运行程序时,SHA1没问题,但SHA256没有。所以我想问题是重用stringBuilder。不知道该怎么办?感谢

1 个答案:

答案 0 :(得分:1)

问题不在于StringBuilder重用,而是重复使用相同的Stream而不重绕它。

在每次哈希计算之前保存Position属性,并在下一次哈希计算之前将其设置回来。