Я не так много знаю в хэш-алгоритмах.Какой дешевый алгоритм хеширования?
Мне нужно вычислить хэш входящего файла в прямом эфире на Java перед пересылкой файла удаленной системы (немного похожей на S3), которая требует хеша файла в MD2/MD5/SHA-X. Этот хеш не вычисляется по соображениям безопасности, а просто для контрольной суммы согласованности.
Я могу вычислить этот хеш при пересылке файла с помощью стандартной библиотеки DigestInputStream стандартной Java, но хотел бы знать, какой алгоритм лучше использовать, чтобы избежать проблем с производительностью при использовании DigestInputStream?
Один из моих бывших коллег протестировал и сказал нам, что вычисление хеш-живого может быть довольно дорого по сравнению с командной строкой unix или файлом.
Редактировать о преждевременной оптимизации: Я работаю в компании, которая предназначается, чтобы помочь другим компаниям дематериализоваться свои документы. Это означает, что у нас есть пакет, который обрабатывает переводы документов от других компаний. Мы нацеливаем в будущем миллионы документов в день, и на самом деле время исполнения этой партии очень чувствительно для нашего бизнеса.
Оптимизация хэширования 10 миллисекунд за 1 миллион документов в день - это ежедневное время исполнения, уменьшенное на 3 часа, которое довольно велико.
вы должны быть в состоянии хэш более 100Мб/с на приличной машине с использованием одного ядра, так что если вы не используете гигабитный Интернет, это не должно быть действительно узкое место. – CodesInChaos
Преждевременная оптимизация - это корень всего зла. Я определенно думаю, что вы должны выбрать хэш, который технически достаточен для того, что вы пытаетесь достичь, и если это ** доказывает ** наличие проблем с производительностью, внесите соответствующие изменения ... – ppeterka
Если вы * действительно не нуждаетесь в безопасности, MD5 - хороший выбор. Но если вы можете позволить себе поразить производительность, пойдите с SHA-2 (SHA-256 или SHA-512) – CodesInChaos