Нужно предложение для более быстрого сравнения отпечатков пальцев / хэша в Linux - PullRequest
2 голосов
/ 02 апреля 2011

В настоящее время я использую команду linux md5sum в bash-скрипте на очень легком (с низким процессором / малой памяти) устройстве linux для возврата и записи контрольных сумм для тысяч файлов с одинаковыми именами по 32 МБ в одном каталоге. *

md5sum ./file* >fingerprint.txt

На следующий день я повторяю процесс для того же набора файлов и программно сравниваю результаты с хешей предыдущего дня. Когда я обнаружил, что отпечаток файла изменился между днем ​​1 и днем ​​2, я предпринял действия с этим конкретным файлом. Если файл остался без изменений, я не предпринимаю никаких действий и продолжаю сравнение.

Проблема, с которой я сталкиваюсь, заключается в том, что метод md5 занимает ДОЛГОЕ время для обработки каждого файла. Сравнение должно быть завершено в течение определенного периода времени, и я начинаю сталкиваться с инцидентами, когда весь процесс просто занимает слишком много времени.

Есть ли какой-нибудь другой метод / инструмент, который я мог бы использовать для надежного сравнения? (обратите внимание, что для сравнения даты недостаточно файлов, а размеры файлов остаются постоянными 32 МБ)

Ответы [ 2 ]

3 голосов
/ 03 апреля 2011

MD5 должен быть быстрым среди криптографических хеш-функций. Но любая конкретная реализация может делать выбор, который на конкретной машине подразумевает неоптимальные характеристики. Какое оборудование вы используете? Тип процессора и размер кэша L1 очень важны.

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

Среди хеш-функций MD4 обычно является самым быстрым, но на некоторых платформах Панама, Радиогатун [32] и Радиогатун [64] могут достичь аналогичной или лучшей производительности. Возможно, вы также захотите взглянуть на некоторых кандидатов SHA-3, в частности на Shabal, который довольно быстр в небольших 32-битных системах.

Важное примечание: некоторые хеш-функции «сломаны», в том смысле, что можно создавать коллизии: два разных входных файла, хэширующие одно и то же значение (именно то, чего вы хотите избежать). MD4 и MD5, таким образом, «сломаны». Однако, столкновение должно быть сделано с целью ; вам не удастся получить одну (неудачную) удачу (вероятности меньше, чем «столкновение» из-за аппаратной ошибки во время вычислений). Если вы находитесь в ситуации, связанной с безопасностью (кто-то может захотеть активно спровоцировать столкновение), тогда все будет сложнее. Среди тех, кого я цитирую, функции Radiogatun и Shabal в настоящее время не нарушены.

0 голосов
/ 02 апреля 2011

Способы его ускорения:

  • Если у вас несколько ядер, вы можете использовать более одного процесса md5hash одновременно. Но я подозреваю, что ваша проблема с доступом к диску, и в этом случае это может не помочь.
  • Вам действительно нужно делать хэш MD5? Проверьте дату / время изменения, размер и INODE вместо хеша для быстрой проверки
  • Рассмотрите возможность выполнения быстрой проверки ежедневно и медленной проверки MD5 еженедельно

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

...