Forums Últimos mensajes - Powered by IBM
 
Tags Palabras claves

Checksum

08/02/2007 - 18:02 por AiTdX100MIl | Informe spam
Hola a todos.

Estoy desarrollando una aplicación donde el usuario trabaja con un fichero
de vídeo.
Lo que quiero hacer es calcular un checksum del fichero que este ha
utilizado para realizar su trabajo de modo que cuando desee continuar con un
trabajo anterior tenga asegurado que trabaja con el mismo fichero.
Actualmente calculo checksum de este modo

MD5 md5 = MD5CryptoServiceProvider.Create();
//byte[] dataMd5 =
md5.ComputeHash(Encoding.Default.GetBytes(nomFic));
FileStream cadenaFichero = File.Open(nomFic, FileMode.Open,
FileAccess.Read);
byte[] dataMd5 = md5.ComputeHash(cadenaFichero);
cadenaFichero.Close();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < dataMd5.Length; i++)
sb.AppendFormat("{0:x2}", dataMd5[i]);
return sb.ToString();

Sin embargo al tratar con ficheros grandes tarda bastante tiempo.

¿Existe otra forma más rápida de poder hacerlo?

Gracias.


Aitdx
 

Leer las respuestas

#1 Alberto Poblacion
08/02/2007 - 18:49 | Informe spam
"AiTdX100MIl" wrote in message
news:86802F6A-B715-4F82-9A1C-
[...] MD5CryptoServiceProvider
[...]
Sin embargo al tratar con ficheros grandes tarda bastante tiempo.

¿Existe otra forma más rápida de poder hacerlo?



Realmente, para lo que quieres hacer, que es comprobar la integridad del
fichero, resulta superfluo utilizar un algoritmo criptográficamente robusto,
como es el MD5, que es costoso de calcular. Te bastaría con un simple código
de redundancia cíclica (CRC), que se puede calcular a gran velocidad. Si
buscas "crc32" en Google encontrarás un montón de subrutinas para hacerlo.
Por ejemplo:
http://staceyw.spaces.live.com/blog/cns!F4A38E96E598161E!402.entry
http://www.gotdotnet.com/Community/...a36cfcc933
http://www.codeproject.com/csharp/m...coding.asp
http://sanity-free.org/12/csharp_cr...ility.html

Tendrás que buscar y comparar, porque no todas las versiones son igual de
rápidas. Por ejemplo, el último de los enlaces anteriores tiene una versión
del algoritmo que utiliza desplazamientos de bits. Esto resultará lento. Las
versiones buenas del CRC son las que se apoyan en una tabla, como por
ejemplo la del primer enlace.

Preguntas similares