多次使用的 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 属性 并在下一次之前将其设置回去。