Stream computeHash字节[]和流差异

Stream computeHash字节[]和流差异,stream,md5,bytearray,Stream,Md5,Bytearray,我在使用computeHash时遇到了一些问题。我同时使用computeHash(流)和computeHash(字节[])。由于某些原因,他们正在返回不同的结果。我尝试将字节[]写入MemStream,但使用字节[]时结果相同 FileStream zz = new FileStream(t.Filename, FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(zz, Encoding.ASCII); byte

我在使用computeHash时遇到了一些问题。我同时使用computeHash(流)和computeHash(字节[])。由于某些原因,他们正在返回不同的结果。我尝试将字节[]写入MemStream,但使用字节[]时结果相同

FileStream zz = new FileStream(t.Filename, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(zz, Encoding.ASCII);
byte[] data = Encoding.ASCII.GetBytes(sr.ReadToEnd());
MemoryStream memStream = new MemoryStream(data);
byte[] test = md5hash.ComputeHash(memStream);
我已关闭该文件,以确保搜索位置位于起始点

zz = new FileStream(t.Filename, FileMode.Open, FileAccess.Read);
zz.Position = 0;
byte[] test1 = md5hash.ComputeHash(zz);
有什么建议吗?我唯一的猜测是,这要么是编码问题,要么是流大小不同

任何帮助都将不胜感激

致以最诚挚的问候,

SunSatION

某些文件编码具有隐藏字符,以提醒消费者应用程序该文件格式。一个组合是:

ï»

我有一个格式为UTF8的文件,并运行了以下程序:

byte[] asciidata, streamdata;
using (var zz = new FileStream("utf8.txt", FileMode.Open, FileAccess.Read))
{
    var sr = new StreamReader(zz, Encoding.ASCII);
    asciidata = Encoding.ASCII.GetBytes(sr.ReadToEnd());
}

using (var zz = new FileStream("utf8.txt", FileMode.Open, FileAccess.Read))
{
    streamdata = new byte[asciidata.Length + 3];
    zz.Read(streamdata, 0, streamdata.Length);
}
变量
asciidata
包含我的文本文件中的四个字符,但是
streamdata
包含以上述三个神奇字符为前缀的四个字符(总共七个字符)


总之,我相信您对编码的怀疑是正确的。

文件中是否有非ASCII字符?是的,有,这似乎就是问题所在。出于某种奇怪的原因,我一直认为ASCII表示8位(包括扩展ASCII)。谢谢,迪恩。我将使用BinaryReader修复此问题