Получить файл 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 #?