Obtenga un archivo SHA256 Hash code y Checksum
Anteriormente le pregunté a unpregunta sobre combinar SHA1 + MD5, pero después de eso entiendo que calcular SHA1 y luego MD5 de un archivo lagrge no es tan rápido como SHA256. En mi caso, un archivo de 4,6 GB tarda unos 10 minutos con la implementación predeterminada SHA256 con (C # MONO) en un sistema Linux.
public static string GetChecksum(string file)
{
using (FileStream stream = File.OpenRead(file))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
Entonces leieste tema y de alguna manera cambiar mi código de acuerdo con lo que dijeron:
public static string GetChecksumBuffered(Stream stream)
{
using (var bufferedStream = new BufferedStream(stream, 1024 * 32))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(bufferedStream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
Pero no tiene tanto cariño y tarda unos 9 minutos.
Luego trato de probar mi archivo a través desha256sum
comando en Linux para el mismo archivo y se tarda unos 28 segundos y tanto el código anterior como el comando de Linux dan el mismo resultado.
Alguien me aconsejó que leyera sobre las diferencias entre Hash Code y Checksum y me comunico coneste tema Eso explica las diferencias.
Mis preguntas son:
¿Qué causa tanta diferencia entre el código anterior y Linux?sha256sum
a tiempo ?
¿Qué hace el código anterior? (Quiero decir, ¿es el cálculo del código hash o el cálculo de la suma de verificación? Porque si busca dar un código hash de un archivo y una suma de verificación de un archivo en C #, ambos llegan al código anterior).
¿Hay algún ataque motivado contrasha256sum
incluso cuando SHA256 es resistente a colisiones?
¿Cómo puedo hacer que mi implementación sea tan rápida?sha256sum
Cía#?