Действительно ли вычисление является хешем MD5 меньше ЦП, интенсивного, чем SHA-1 или SHA-2 на "стандартном" ноутбуке x86 аппаратные средства? Я интересуюсь общей информацией, не характерной для определенной микросхемы.
ОБНОВЛЕНИЕ: В моем случае я интересуюсь вычислением хеша файла. Если размер файла имеет значение, давайте примем его 300K.
Да, MD5 несколько менее загружает процессор. На моем Intel x86 (Core2 Quad Q6600, 2,4 ГГц, с использованием одного ядра) я получил это в 32-битном режиме:
MD5 411
SHA-1 218
SHA-256 118
SHA-512 46
и это в 64-битном режиме:
MD5 407
SHA-1 312
SHA-256 148
SHA-512 189
Цифры указаны в мегабайтах в секунду, для " длинное "сообщение (это то, что вы получаете для сообщений размером более 8 КБ). Это с sphlib , библиотекой реализаций хэш-функций на C (и Java). Все реализации принадлежат одному автору (мне) и были сделаны с сопоставимыми усилиями по оптимизации; таким образом, различия в скорости можно рассматривать как действительно присущие функциям.
Для сравнения, примите во внимание, что последний жесткий диск будет работать со скоростью около 100 МБ / с, а все данные, передаваемые через USB, будут работать со скоростью ниже 60 МБ / с. Хотя здесь SHA-256 кажется «медленным», он достаточно быстр для большинства целей.
Обратите внимание, что OpenSSL включает 32-битную реализацию SHA-512, которая намного быстрее, чем мой код (но не так быстро, как 64-битный SHA-512), потому что реализация OpenSSL находится в сборка и использует регистры SSE2, что невозможно сделать на простом языке C. SHA-512 - единственная функция из этих четырех, которая выигрывает от реализации SSE2.
Редактировать: на этой странице можно найти отчет о скорости многих хеш-функций (щелкните ссылку «Telechargez maintenant»). Отчет на французском языке, но в основном он полон таблиц и цифр, причем цифры являются международными. Реализованные хэш-функции не включают кандидатов SHA-3 (кроме SHABAL), но я над этим работаю.
MD5 также выигрывает от использования SSE2, посмотрите на BarsWF и потом скажите мне, что это не так. Все, что требуется, это немного знаний ассемблера, и вы можете создать свою собственную MD5 SSE2 рутину(ы). Однако для больших объемов пропускной способности существует компромисс между скоростью хэширования и временем, потраченным на перегруппировку входных данных для совместимости с используемыми SIMD-инструкциями.