Как рассчитать хэш большого файла с помощью gcrypt, в C ++ - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть файл, который мне нужно хэшировать, этот файл может быть слишком большим для чтения в память за один раз, поэтому мне нужен способ использования gcrypt для хэширования файла в кусках более управляемого размера, как я могу это сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

Я нашел, как это сделать:

Дескриптор gcrypt действителен и основывается на его входных данных, так что независимо от того, записываете ли вы пять блоков данных по 1 КБ в дескриптор или один блок данных по 5 КБ, хеш-код одинаковв любом случае.Сам хэш не завершается до тех пор, пока вы не попытаетесь его прочитать, поэтому вы можете сидеть в цикле, читая порции большого файла за раз и передавая их в gcrypt и, таким образом, не позволяя себе иметь слишком много памяти в одномвремя.

0 голосов
/ 24 февраля 2011

Я раньше не решал эту проблему, но могу придумать 2 возможных решения.

  1. Сохраните хэш-набор. Допустим, ваш объем памяти составляет 1 КБ, а файл - 5 КБ. Вы можете иметь 5 частей этого файла. Возьмите хэш каждого куска и сохраните набор ответов. В этом примере вы должны хранить 5 значений хеш-функции для представления этого файла.

  2. Используйте опцию 1, затем объедините значения хеш-функции вместе и возьмите хеш-значение этого.

В основном это зависит от ваших ограничений на то, как хранятся значения хеш-функции.

Надеюсь, это поможет.

...