Obter um arquivo SHA256 Código hash e soma de verificação
Anteriormente, perguntei aPergunta, questão sobre a combinação de SHA1 + MD5, mas depois disso eu entendo o cálculo do SHA1 e do MD5 de um arquivo lagrge não é tão rápido quanto o SHA256. No meu caso, um arquivo de 4,6 GB leva cerca de 10 minutos com a implementação padrão SHA256 com (C # MONO) em um 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);
}
}
Então eu liEste tópico e de alguma forma mude meu código de acordo com o que eles disseram:
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);
}
}
Mas não tem tanto carinho e leva cerca de 9 minutos.
Então eu tento testar meu arquivo atravéssha256sum
comando no Linux para o mesmo arquivo e leva cerca de 28 segundos e o código acima e o comando Linux fornecem o mesmo resultado!
Alguém me aconselhou a ler sobre as diferenças entre o Hash Code e o Checksum e chego aEste tópico isso explica as diferenças.
Minhas perguntas são:
O que causa tanta diferença entre o código acima e o Linuxsha256sum
em tempo ?
O que o código acima faz? (Quero dizer, é o cálculo do código de hash ou o cálculo da soma de verificação? Porque se você pesquisar sobre fornecer um código de hash de um arquivo e a soma de verificação de um arquivo em C #, os dois acessam o código acima.)
Existe algum ataque motivado contrasha256sum
mesmo quando o SHA256 é resistente a colisões?
Como posso tornar minha implementação o mais rápido possívelsha256sum
em c #?