Вопрос или проблема
Какой хэш-алгоритм требует больше времени для вычисления: md5
или sha256
?
Я не хочу использовать это по причинам безопасности, поэтому меня не интересует, какой из них более безопасен, я просто хочу узнать, какой из них требует меньше времени.
Это зависит от оборудования и программного обеспечения, которые вы используете. Ниже приведены результаты сравнения между MD5 и SHA с использованием библиотеки openssl на моем компьютере. Однако разные реализации, учитывающие аппаратное ускорение, дадут разные результаты. Современные процессоры имеют аппаратное ускорение для хэш-функций. У графических процессоров будут лучшие результаты, а специализированное оборудование существует для дальнейшего ускорения хэширования. Это особенно актуально для SHA, поскольку он используется для майнинга криптовалют.
$ openssl speed md5 sha1 sha256
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md5 58318.02k 171878.31k 370689.37k 502232.78k 580493.45k
sha1 69045.26k 188431.38k 385979.53k 543316.53k 625854.82k
sha256 49638.66k 107537.27k 183872.51k 226793.47k 237228.26k
'Числа' указаны в 1000 байт в секунду, обработанных.
Обновление 2021 года с OpenSSL 1.1.1d
: теперь мы видим, что md5 часто медленнее на новых процессорах, особенно для больших блоков:
## ПК i7-1165G7 @ 2.80GHz (2020)
OpenSSL 1.1.1d 10 сен 2019 / собран: Пн 7 дек 20:44:45 2020 UTC
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
md5 189018.70k 418310.85k 712090.28k 890189.14k 956293.12k 962560.00k
sha1 287134.62k 746529.17k 1474064.38k 1973607.08k 2197842.60k 2192179.20k
sha256 222301.71k 603962.47k 1213340.33k 1665262.59k 1849016.32k 1847388.84k
## Сервер AMD EPYC 7571 (2018)
OpenSSL 1.1.1d 10 сен 2019 / собран: Пн 7 дек 20:44:45 2020 UTC
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
md5 93668.33k 213979.18k 378971.56k 467472.38k 501205.67k 504064.68k
sha1 165020.82k 442991.72k 888443.48k 1188591.62k 1319236.95k 1330080.43k
sha256 142886.55k 375612.63k 791567.70k 1095950.34k 1234381.48k 1246827.86k
## Сервер E5-2682 v4 @ 2.50GHz (2016)
OpenSSL 1.1.1d 10 сен 2019 / собран: Пн 7 дек 20:44:45 2020 UTC
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
md5 101505.24k 207422.92k 393158.83k 453332.99k 527085.34k 490711.72k
sha1 98091.83k 249828.79k 389640.36k 675694.25k 686966.33k 721021.61k
sha256 55421.86k 130103.33k 251929.17k 302571.86k 296977.81k 338439.56k
MD5
обычно известен как более быстрый, чем SHA256
. Вы можете подтвердить это на этой странице, например.
OpenSSL, например, имеет встроенный набор для оценки производительности, так что вы можете сравнить сами, запустив:
$ openssl speed md5
$ openssl speed sha256
Но, конечно, оборудование и программное обеспечение, которые вы используете для сравнения, могут повлиять на результаты. Вы можете увидеть результаты, которые получил этот пользователь на своих 32 и 64-битных системах, но я думаю, что эта таблица сравнения достаточно показательна, чтобы судить о том, что MD5
быстрее, чем SHA256
.
Ответ или решение
Сравнение алгоритмов хеширования MD5 и SHA-256 показывает, что, в целом, MD5 работает быстрее, чем SHA-256. Это различие во времени вычисления обусловлено архитектурой самих алгоритмов: MD5 является более простым и менее сложным алгоритмом, что позволяет ему обрабатывать данные быстрее.
По приведённым тестам из различных источников, включая библиотеку OpenSSL, можно увидеть, что при различных размерах блоков данных MD5 обрабатывает их быстрее, чем SHA-256. Например, результаты тестирования на компьютерах с сучасными процессорами показывают, что MD5 может достигать значительно более высокой скорости обработки при хешировании данных по сравнению с SHA-256.
Однако стоит отметить, что производительность может варьироваться в зависимости от аппаратного обеспечения и программного обеспечения, используемого для тестирования. Некоторые современные процессоры поддерживают аппаратное ускорение для хеширования, что может улучшить производительность как для MD5, так и для SHA-256, хотя, как правило, MD5 остается быстрее.
В заключение, если ваша основная цель заключается только в вычислительной эффективности и не имеет значения безопасность, MD5, как правило, будет быстрее, чем SHA-256. Тем не менее, для задач, связанных с безопасностью, настоятельно рекомендуется использовать более надежные алгоритмы хеширования, такие как SHA-256 или лучшее, поскольку MD5 больше не считается безопасным.