使用以下代码,无论输入如何,我总是得到相同的哈希值。任何想法为什么会这样?

    private static SHA256 sha256;
    internal static byte[] HashForCDCR(this string value)
    {
        byte[] hash;
        using (var myStream = new System.IO.MemoryStream())
        {
            using (var sw = new System.IO.StreamWriter(myStream))
            {
                sw.Write(value);
                hash = sha256.ComputeHash(myStream);
            }
        }

        return hash;
    }

最佳答案

您正在计算流的空白部分(使用sw.Write编写的内容之后紧跟的部分)的哈希,因此它始终是相同的。

便宜的解决方法:sw.Flush();myStream.Position = 0;。更好的解决方法是完成写入并基于原始流创建新的只读流以进行加密:

using (var myStream = new System.IO.MemoryStream())
{
    using (var sw = new System.IO.StreamWriter(myStream))
    {
        sw.Write(value);
    }
    using (var readonlyStream = new MemoryStream(myStream.ToArray(), writable:false)
    {
       hash = sha256.ComputeHash(readonlyStream);
    }
}

09-25 18:34