computeHash byte []和Stream差异

时间:2010-08-31 23:14:22

标签: stream md5 bytearray

我在使用computeHash时遇到了一些麻烦。我正在使用computeHash(Stream)和computeHash(byte [])。出于某种原因,他们正在回馈不同的结果。我尝试将byte []写入MemStream,但使用Byte []

时结果相同
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);

有什么建议吗?我唯一的猜测是,它是一个编码问题,或者Stream有不同的大小。

任何帮助都会非常感激。

最诚挚的问候,
SunSatION

1 个答案:

答案 0 :(得分:2)

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

  



我有一个格式为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包含前面描述的三个魔术字符前缀的四个字符(总共七个字符)

总之,我相信你怀疑编码是否正确。