Как рассчитать контрольную сумму MD5 и SHA для огромного файла?

Я хочу вычислить контрольную сумму MD5 и SHA для ряда огромных файлов.
Каждый файл о 1GBПоэтому я хочу быть как можно быстрее.

Может ли кто-нибудь помочь порекомендовать эффективную библиотеку C ++?

КСТАТИ,

При чтении файла fread( buffer, sizeof(char), BUFFER_SIZE, fin )какого размера BUFFER_SIZE разумно?

1

Решение

Я бы лично сделал FILE *pipe = popen("md5sum filename"); [или что-то в этом роде] — скорее всего, это будет так же быстро, как и все остальное, поскольку чтение 1 ГБ файла займет некоторое время, а вычисления вряд ли будут использовать большую часть вашего процессорного времени — большую часть времени будет ждать, пока диск загрузит файл.

В моей системе я создал 6 файлов по 1 ГБ каждый, и проверка контрольной суммы файла с помощью md5sum занимает 2 секунды. (12 секунд для всех 6 файлов).

2

Другие решения

Вы можете использовать Openssl.
Поиск мистического ответа о большом файле MD5
Как создать md5 хэш строки в C?
Посмотрев документы Openssl SHA, вы увидите, что способы использования этих функций в MD5 и SHA одинаковы.
SHA Openssl Docs

1

Кроме того, я не знаю никакой быстрой библиотеки C ++. Вычисление хеша относительно просто, поэтому любую библиотеку C будет так же легко использовать (вы можете легко обернуть ее в класс C ++ самостоятельно). Я нашел следующий сайт, где парень реализовал несколько алгоритмов хеширования в сборке x86 и сравнил их с «официальными» реализациями C тех же алгоритмов:

https://www.nayuki.io/page/fast-sha1-hash-implementation-in-x86-assembly
https://www.nayuki.io/page/fast-md5-hash-implementation-in-x86-assembly

Эти реализации должны быть хорошей отправной точкой, и тогда вам нужно просто сделать файловый ввод-вывод максимально эффективным. Операции ввода-вывода с отображением в память, как правило, очень эффективны, или тогда вы можете пойти сложнее и использовать два потока: один поток читает фрагменты из файла, а другой поток хэширует прочитанные данные. Идея здесь состоит в том, чтобы всегда сохранять процесс, выполняющий что-то полезное, то есть хэши могут быть вычислены, ожидая, пока больше данных будет считано из файла.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector