Получить файл SHA256 Hash code и Checksum

Ранее я спросилвопрос насчет объединения SHA1 + MD5, но после этого я понимаю, что вычисление SHA1, а затем MD5 файла lagrge происходит не так быстро, как SHA256. В моем случае файл объемом 4,6 ГБ занимает около 10 минут с реализацией по умолчанию SHA256 с (C # MONO) в системе 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);
    }
}

Потом читаюЭта тема и как-то изменить мой код в соответствии с тем, что они сказали:

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);
    }
}

Но это не имеет такой привязанности и занимает около 9 минут.

Затем я пытаюсь проверить мой файл черезsha256sum Команда в Linux для того же файла и занимает около 28 секунд, и приведенный выше код и команда Linux дают одинаковый результат!

Кто-то посоветовал мне прочитать о различиях между хэш-кодом и контрольной суммой, и я дошел доЭта тема это объясняет различия.

Мои вопросы:

Что вызывает такие различия между приведенным выше кодом и Linuxsha256sum во время ?

Что делает приведенный выше код? (Я имею в виду, это вычисление хеш-кода или вычисление контрольной суммы? Потому что, если вы ищете, задаете хеш-код файла и контрольную сумму файла в C #, они оба достигают вышеуказанного кода.)

Есть ли мотивированная атака противsha256sum даже когда SHA256 устойчив к столкновениям?

Как я могу сделать мою реализацию так быстро, какsha256sum в C #?

Ответы на вопрос(2)

Ваш ответ на вопрос