Как генерация MD5 зависит от размера файла? - PullRequest
4 голосов
/ 10 августа 2009

Есть ли анализ эффективности того, как MD5 зависит от размера файла. Это на самом деле зависит от размера файла или содержимого файла. Таким образом, поскольку у меня есть файл 500 МБ со всеми пробелами и файл 500 МБ с фильмом в нем, md5 потребует того же времени для генерации хэш-кода?

Ответы [ 5 ]

8 голосов
/ 10 августа 2009

Любая хеш-сумма, по определению, является математической суммой байтов того, что вы суммируете. Вы должны прочитать файл через поток как минимум - больше байтов занимает больше времени для прохождения. Тем не менее, я бы сказал (вообще говоря), что узким местом действительно будет чтение файла, независимо от того, что вы пытаетесь с ним - не хэшировать его после прочтения.

Редактировать: Я как бы неправильно понял вопрос. Хэширование двух файлов одинакового размера займет ровно столько же времени. 500 МБ пробелов - это 500 МБ байтов, которые представляют «пробел». Это по-прежнему 8 бит данных на байт, как и любой другой файл.

3 голосов
/ 10 августа 2009

Поскольку MD5 состоит в основном из операций XOR, AND, OR и NOT, скорость не зависит от заданного бита, содержащего 1 или 0.

<ч />

От http://en.wikipedia.org/wiki/MD5:

Существует четыре возможных функции F; в каждом раунде используется другой:

Source: http://upload.wikimedia.org/math/c/8/8/c887dfd80049b04ba54abfed7a04bda2.png
Source: http://upload.wikimedia.org/math/e/f/9/ef971bcd2ed5aeb59d6de12bcec32491.png
Source: http://upload.wikimedia.org/math/6/b/2/6b2e2f185f30889f1e37afe9ce29a096.png
Source: http://upload.wikimedia.org/math/c/8/8/c887dfd80049b04ba54abfed7a04bda2.png

Source: http://upload.wikimedia.org/math/d/9/6/d96277da48b2e8f86c7268f480a9e87c.png обозначает операции XOR, AND, OR и NOT соответственно.

2 голосов
/ 10 августа 2009

Вот быстрый эмпирический тест.

# dd if=/dev/urandom of=randomfile bs=1024 count=512000
# dd if=/dev/zero of=zerofile bs=1024 count=512000

# time md5 randomfile 
MD5 (randomfile) = bb318fa1561b17e30d03b12e803262e4

real    0m2.753s
user    0m1.567s
sys 0m1.157s

# time md5 zerofile
MD5 (zerofile) = d8b61b2c0025919d5321461045c8226f

real    0m2.761s
user    0m1.567s
sys 0m1.168s

Ожидается, что согласно предыдущим ответам со ссылкой на битовые манипуляции, используемые в алгоритме MD5.

2 голосов
/ 10 августа 2009

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

0 голосов
/ 11 августа 2009

MD5, как и большинство других алгоритмов хеширования, работает с блоками. Для каждого 512-битного блока ввода он выполняет ту же операцию и использует вывод как часть ввода для следующего блока.

Операция состоит из одних и тех же основных операций (XOR, AND, NOT и т. Д.). На всех известных мне процессорах эти операции будут занимать одно и то же время, независимо от аргументов. Таким образом, время, необходимое MD5 для обработки ввода, должно быть линейным по числу 512-битных блоков на входе.

...