Holen Sie sich eine Datei SHA256 Hash-Code und Prüfsumme
Vorher habe ich ein @ gefraFrag über das Kombinieren von SHA1 + MD5, aber danach verstehe ich, dass das Berechnen von SHA1 und dann von MD5 einer Lagrge-Datei nicht so schneller ist als SHA256. In meinem Fall dauert eine 4,6-GB-Datei mit der Standardimplementierung SHA256 mit (C # MONO) in einem Linux-System ungefähr 10 Minuten.
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);
}
}
Dann lese ichdieses Them und ändere irgendwie meinen Code entsprechend dem, was sie gesagt haben:
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);
}
}
Aber es hat keine solche Zuneigung und dauert etwa 9 Minuten.
Dann versuche ich, meine Datei über @ zu testesha256sum
-Befehl in Linux für dieselbe Datei und Es dauert ungefähr 28 Sekunden und sowohl der obige Code als auch der Linux-Befehl führen zu demselben Ergebnis!
Jemand hat mir geraten, über die Unterschiede zwischen Hash-Code und Checksum zu lesen, und ich erreichedieses Them das erklärt die Unterschiede.
Meine Fragen sind:
Was verursacht solche Unterschiede zwischen dem obigen Code und Linuxsha256sum
rechtzeitig
Was macht der obige Code? (Ich meine, handelt es sich um die Berechnung des Hash-Codes oder der Prüfsumme? Wenn Sie nach einem Hash-Code für eine Datei und einer Prüfsumme für eine Datei in C # suchen, erreichen beide den obigen Code.)
Gibt es einen motivierten Angriff gegensha256sum
auch wenn SHA256 kollisionsfest ist?
Wie kann ich meine Implementierung so schnell wie möglich durchführen?sha256sum
in C #?