Как заметил Тодд Янделл, MD5, вероятно, достаточно быстрый. Если нет, вы можете получить что-то еще быстрее, используя 32-битную или 64-битную CRC для своей контрольной суммы. Основное отличие состоит в том, что любой может создать новый образ с тем же CRC; это очень легко подделать. Кому-то довольно сложно подделать контрольную сумму MD5. Небольшое отличие состоит в том, что CRC имеет намного меньше битов, но если у вас нет очень большого количества изображений, столкновение все равно маловероятно.
exiftool
утверждает, что может извлекать двоичное изображение из файла JPEG, так что вы можете вычислить контрольную сумму без распаковки, но я не могу понять, как это сделать на странице руководства это.
Я провел несколько экспериментов на ноутбуке с процессором Intel Core 2 Duo L7100, и 8-мегапиксельный JPEG занимает около 1 секунды для сжатия в формат PPM, затем еще 1 секунду для выполнения контрольной суммы. Время контрольной суммы не сильно отличалось при использовании md5sum
, sum
и sha1sum
. Поэтому лучше всего было бы найти способ извлечь двоичные данные, не распаковывая их.
Я также отмечаю, что ваша контрольная сумма будет почти такой же хорошей, даже если она использует намного меньше пикселей. Сравните эти два:
djpeg -scale 1/8 big.jpg | /usr/bin/sha1sum # 0.70s
djpeg big.jpg | /usr/bin/sha1sum # 2.15s