Используйте SHA-2.Всегда.SHA-1 должен быть зарезервирован для ситуаций, когда SHA-2 не может использоваться из-за проблем совместимости с унаследованным кодом.
Нет проблем с производительностью, пока не будут выполнены фактические меры.Хэш-функции работают быстро.В большинстве ситуаций производительность хэш-функции оказывает лишь незначительное влияние;даже обнаружение этого может оказаться трудным.Безопасность на первом месте.Поскольку в SHA-1 обнаружены слабые места, его использование, тем не менее, требует некоторого обоснованного обоснования.Использование SHA-256 не будет подвергнуто сомнению;это «выбор по умолчанию».Но если вы используете SHA-1, подготовьтесь к критике.
Обратите внимание, что есть четыре функций, известных как "SHA-2": SHA-224, SHA-256, SHA-384и SHA-512.SHA-224 и SHA-256 - это одна и та же функция, за исключением внутреннего параметра («начальное значение») и выходного размера (выходной размер SHA-224 составляет 28 байтов, тогда как SHA-256 предлагает 32 байта);они имеют одинаковые характеристики производительности.Точно так же SHA-384 и SHA-512 одинаковы по производительности.SHA-512 использует 64-битные арифметические операции и работает быстрее, чем SHA-256 на платформах, которые предлагают 64-битные коды операций;на 32-битных платформах SHA-256 будет быстрее (примечание: на 32-битных x86 с собственным кодом можно использовать коды операций SSE2 и их 64-битные вычислительные возможности, следовательно, некоторый собственный кодРеализация SHA-512 будет быстрее, чем SHA-256 в 32-битном режиме; это делает код OpenSSL; но, насколько мне известно, реализация SHA-512 в .NET - это «управляемый код»).Кроме того, все функции SHA- * имеют некоторую базовую степень детализации, поскольку они обрабатывают данные по блокам: для SHA-256 блоки имеют длину 64 байта, тогда как SHA-512 использует 128-байтные блоки;при хэшировании очень коротких элементов данных более высокая степень детализации SHA-512 соответственно снижает его производительность.Наконец, SHA-256 (на 32-разрядной платформе), вероятно, даст меньший код (т. Е. Использует меньше кэш-памяти L1 на ЦП).
Поэтому, если есть сомнения, используйте SHA-256.Если вы планируете использовать SHA-1, тогда вы должны сомневаться.
Если вы хотите использовать хеш-функцию для некриптографического использования (т. Е. Недостатки не являются для вас проблемой), тогда вместо SHA-1, рассмотрим MD4 .