2010-08-31 9 views
5

He estado teniendo problemas con computeHash. Estoy usando tanto computeHash (Stream) como computeHash (byte []). Por alguna razón, están devolviendo resultados diferentes. He intentado escribir el byte [] en un MemStream pero resultado fue el mismo cuando se utiliza byte []computeHash byte [] y Stream diferencia

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); 

He cerrado el archivo para asegurarse de que la posición es buscar en el punto de partida.

zz = new FileStream(t.Filename, FileMode.Open, FileAccess.Read); 
zz.Position = 0; 
byte[] test1 = md5hash.ComputeHash(zz); 

¿Alguna sugerencia? Mi única conjetura es que es un problema de Codificación o que el Stream tiene un tamaño diferente.

Cualquier ayuda sería muy apreciada.

Best Regards,
Sunsation

+0

¿Hay caracteres no ASCII en el archivo? –

+0

Sí, hay y ese parece ser el problema. Por alguna extraña razón, siempre he pensado que ASCII significa 8 bits (incluido ASCII extendido). Gracias Dean. Arreglaré esto usando BinaryReader – SunSatION

Respuesta

2

Algunas codificaciones de archivo han ocultado caracteres para alertar a una aplicación de consumo del formato de archivo. Una combinación es:

ï » ¿

Tengo un archivo con formato UTF8, y encontré lo siguiente:

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); 
} 

La variable asciidata contenían los cuatro personajes en mi archivo de texto , pero streamdata contenía los cuatro caracteres prefijados por los tres personajes mágicos descritos anteriormente (para un total de siete caracteres) ers).

En conclusión, creo que su sospecha de que la codificación es la culpa es correcta.

Cuestiones relacionadas