多次使用的 StringBuilder 不起作用
StringBuilder used multiple times doesn't work
我对 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 上。知道如何处理这个吗?谢谢
问题不在于 StringBuilder
重用,而是重复使用相同的 Stream
而没有倒带。
在每次哈希计算之前保存 Position
属性 并在下一次之前将其设置回去。
我对 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 上。知道如何处理这个吗?谢谢
问题不在于 StringBuilder
重用,而是重复使用相同的 Stream
而没有倒带。
在每次哈希计算之前保存 Position
属性 并在下一次之前将其设置回去。