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 #?