Действительно ли 20 байтов на хэш (при условии двоичного хранилища) слишком много?Если вы в настоящее время используете шестнадцатеричное кодирование, переключение на двоичный код экономит 20 байт на хеш.Base64 экономит около 10 байтов по сравнению с шестнадцатеричным.
Если вы просто усекаете криптографический хеш, это все же хороший криптографический хеш, но с уменьшенным размером вывода.Какой выходной размер вам нужен, зависит от вашего приложения.
Проверка целостности на случайные изменения может использовать намного более короткий хэш - 32-64 бита и не требует криптографических хеш-функций.
Если вынужна уникальность, у вас должно быть >>2*log_2(entries)
битов в вашем хэше (см. парадокс дня рождения ).Приблизительно в 120 битах это похоже на GUID / UUID (есть режим генерации на основе sha1 для GUID)
Если вы хотите криптографическую стойкость, я бы избегал идти ниже 128 бит.