2010-08-31 59 views
5

我一直在computeHash上遇到一些麻烦。我正在使用computeHash(Stream)和computeHash(byte [])。出于某种原因,他们正在回报不同的结果。我已经试过的byte []写入一个MemStream但使用字节[]computeHash 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); 

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

任何帮助将非常感激。

最好的问候,
SunSatION

+0

文件中是否有非ASCII字符? – 2010-08-31 23:25:01

+0

是的,这似乎是问题。出于某种奇怪的原因,我一直认为ASCII表示8位(包括扩展ASCII)。 谢谢Dean。我会使用BinaryReader来解决这个问题 – SunSatION 2010-08-31 23:51:12

回答

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包含由上述三个魔法字符前缀的四个字符(总共七个字符ers)

总之,我相信你怀疑编码是错误的。