我遇到了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。不知道该怎么办?感谢
答案 0 :(得分:1)
问题不在于StringBuilder
重用,而是重复使用相同的Stream
而不重绕它。
在每次哈希计算之前保存Position
属性,并在下一次哈希计算之前将其设置回来。