В базе данных будет храниться множество файлов, и мне нужно, чтобы хеши файлов были уникальными, чтобы определить, что файл не был изменен. (В общем, будет использоваться в качестве компонента Windows Personal Firewall)Самый быстрый способ рассчитать хэш файла?
ответ
Это, конечно же, невозможно вообще. Многие люди все еще используют хэширование для этой цели, а MD5 - популярный алгоритм, который дает 128-битную «подпись» для файла с высокой вероятностью изменения при изменении содержимого файла.
В общем случае вам нужно посмотреть каждый бит файла, чтобы включить его в хэш, и производительность, вероятно, будет ограничена I/O. Это последовательная развертка по всем данным в файле, обновляющая состояние любого алгоритма хеширования, который вы используете для каждого нового байта. На современном процессоре последняя будет быстрее, чем первая. This rather old analysis показывает около ~ 45 МБ/с на процессоре Pentium 90 МГц.
Если я правильно понимаю, что «используется как персональный брандмауэр Windows», MD5 не является хорошим выбором в качестве алгоритма.
Существует успешная атака на алгоритм MD5, который позволяет найти другое сообщение, которое создает такой же хеш с относительно небольшой работой (по сравнению с грубой силой). Эта атака , использованная для, не имеет реального подшипника, например. когда MD5 использовался для хеш-паролей или таких. В то же время были обнаружены новые атаки, поэтому и MD5, и SHA-1 можно хэшировать/сталкиваться с ужасной скоростью, а взломать все базы данных «правильно соленых» и однодольных паролей пользователей с этими «пожилыми» хэшами не только полностью выполнимо, но уже продемонстрировано.
Тем не менее, в конкретном приложении «убедитесь, что этот файл не был взломан», такой тип атаки всегда был проблемой, не только недавно. MD5 вполне безопасно обнаруживает небольшую ошибку или модификацию, но вредоносное ПО, пытающееся обойти ваш личный файловый сервер, скорее всего может обойти всю вашу безопасность, обнаружив столкновение зараженного двоичного файла, чтобы хэш совпадал с оригиналом.
Вы должны использовать SHA-256 для этого случая [Update: в то же время, SHA-3 выходит, и пока я лично не согласен с выбором NIST в победителя (или неясные критерии для правящей из очень хороших круглых 2 кандидатов), это гораздо безопаснее выбор для использования SHA-3 (Keccak) или, альтернативно, одного из финалистов SHA-3. Все финалисты были тщательно разработаны опытными командами, были тщательно проанализированы, и до сих пор ни у кого нет реалистичной атаки или известной проблемы, которая могла бы привести к реалистичной атаке, и все они тоже имеют «больше бит» (который сам по себе не означает многого, но больше бит не болит)].
Кроме того, не забудьте сохранить длину файла в дополнение к хешу, это значительно упрочит даже плохой хеш по невыгодной цене. Если можно, вычислите два разных хэша. Это much для злоумышленника легко найти сообщение, которое вызывает коллизию на , а не нахожу сообщение, которое вызывает коллизию и имеет точно такую же длину, или даже сообщение, которое сталкивается на двух разных хэшей и имеет одинаковую длину.
Поскольку пропускная способность (как диск, так и память) является неотрицательным фактором при вычислении хэша, возможно даже, что вычисление одного хеша или двух хэшей одновременно выполняется со сравнимой скоростью.
Я наблюдал такой эффект при вычислении CRC и последующем шифровании тех же блоков блочным шифрованием. Независимо от того, вычислялся ли CRC, разница в общей продолжительности работы составляла менее 1%, поэтому в основном это была бесплатная операция.
Если вы считаете, что у вас есть веская причина не использовать общеизвестный стандартный хэш (ограничения производительности?), Вы можете создать собственный безопасный хеш. Используя конструкцию Merkle-Damgård (или совсем недавно HAIFA), вы можете превратить любой защищенный блочный шифр в безопасную хэш-функцию. Например, зашифруйте каждый входной блок с помощью AES с помощью фиксированного ключа, а xor - выход в следующий блок, прежде чем шифровать его. Результат после последнего блока - ваше значение хеша.
Хотя «создать свой собственный», как правило, не очень хорошая идея, в этом случае действительно могут быть веские причины, так как AES быстро и поддерживается аппаратными средствами в самых последних процессорах. На моей машине AES работает со скоростью примерно 130 МБ/с. На i7 (у которого есть аппаратная поддержка), он сообщает около 570 МБ/с в Интернете.
Что касается ограничения ввода-вывода, то разворот прав, диск вполне может быть ограничивающим фактором, хотя этого не должно быть. Картирование памяти - ваш друг, особенно в вашем конкретном случае.
Если вы проверяете файлы, которые применяются для прав на брандмауэре, то это будут исполняемые файлы, которые были загружены в ОЗУ (как это может быть иначе, они выполняются в конце концов!). Таким образом, сопоставление страниц, которые уже находятся в ОЗУ, будет просто добавлением записи в таблицу страниц, более или менее без операции. И даже если данные не находятся в ОЗУ, производительность (и легкость) картографирования памяти совершенно ошеломляет, я редко использую что-нибудь еще в эти дни, когда скорость вызывает какое-либо беспокойство.
О, мой вопрос, 2 года! Почему никто не сказал мне, теперь я чувствую себя глупо ... – Damon 2011-03-11 01:08:14
- 1. Каков самый быстрый способ загрузки сериализованного хэш-файла в Java?
- 2. Самый быстрый способ рассчитать окрестности пикселей
- 3. Самый быстрый способ чтения файла
- 4. Самый быстрый способ импорта?
- 5. Самый быстрый способ читать долго [] из файла?
- 6. Самый быстрый способ сменить заголовок файла gzip?
- 7. Самый быстрый способ чтения содержимого файла
- 8. Каков самый быстрый способ перезаписи файла?
- 9. Python: Самый быстрый способ обработки большого файла
- 10. Самый быстрый способ сравнить содержимое текстового файла
- 11. Самый быстрый способ найти строку внутри файла
- 12. Самый быстрый способ чтения файла по строкам?
- 13. Самый быстрый способ рендеринга bmp-файла
- 14. Самый быстрый способ сделать перекресток?
- 15. Самый быстрый способ поиска строки
- 16. Самый быстрый способ взять
- 17. Самый быстрый способ Алгоритм
- 18. Самый быстрый способ получить хэш из списка в python
- 19. Самый быстрый способ рассчитать эвклидовое расстояние в c
- 20. Самый быстрый способ рассчитать расстояние между двумя CGPoints?
- 21. Каков самый быстрый способ рассчитать использование диска на одного клиента?
- 22. Самый быстрый способ рассчитать «процентное соответствие» двух трапеций
- 23. Самый быстрый способ рассчитать сводку поля базы данных
- 24. Каков самый быстрый способ рассчитать размер папок Windows?
- 25. Android, вычисляющий хэш SHA-1 из файла, самый быстрый алгоритм
- 26. Какой самый быстрый способ сканирования очень большого файла в java?
- 27. Самый быстрый хэш для некритичного использования?
- 28. быстрый способ итерации ove связанный хэш-карта
- 29. Самый быстрый/самый простой способ обновить datagridview?
- 30. Самый быстрый способ расчета размеров каталога
Вы перепутали биты и байты. Этот веб-сайт показывает ~ 45 Мбит/с не 45 МБ/с. 2.0 clocks-per-byte нереально. Современные процессоры управляют примерно 5 часами за байт для MD5. – CodesInChaos 2013-01-13 15:04:07