Как уменьшить размер SHA1? - PullRequest
5 голосов
/ 06 июня 2011

У меня проблема, возможно глупый вопрос, я хочу сохранить данные в базе данных после хэширования с помощью алгоритма SHA1. Однако в будущем размер базы данных увеличится, поскольку размер слов в SHA1 велик.

Можем ли мы уменьшить размер алгоритма SHA1, возможно, вдвое меньше. Я прошу прощения за мой глупый вопрос и за мой плохой английский. Благодарю. : D

Я использую JAVA.

Ответы [ 3 ]

10 голосов
/ 06 июня 2011

Действительно ли 20 байтов на хэш (при условии двоичного хранилища) слишком много?Если вы в настоящее время используете шестнадцатеричное кодирование, переключение на двоичный код экономит 20 байт на хеш.Base64 экономит около 10 байтов по сравнению с шестнадцатеричным.

Если вы просто усекаете криптографический хеш, это все же хороший криптографический хеш, но с уменьшенным размером вывода.Какой выходной размер вам нужен, зависит от вашего приложения.

Проверка целостности на случайные изменения может использовать намного более короткий хэш - 32-64 бита и не требует криптографических хеш-функций.

Если вынужна уникальность, у вас должно быть >>2*log_2(entries) битов в вашем хэше (см. парадокс дня рождения ).Приблизительно в 120 битах это похоже на GUID / UUID (есть режим генерации на основе sha1 для GUID)

Если вы хотите криптографическую стойкость, я бы избегал идти ниже 128 бит.

5 голосов
/ 06 июня 2011

Если вы уменьшите его, то больше не будет SHA1 :). Вы должны подумать о другом алгоритме

4 голосов
/ 06 июня 2011

Нет; хэш SHA-1 по определению имеет размер 160 бит. Я сильно сомневаюсь, что размер хеша будет проблемой; Я полагаю, у вас есть другие данные в вашей базе данных? Скорее всего, вы обнаружите, что другие части данных вносят еще больший вклад в размер базы данных. И сколько строк вы ожидаете получить с этими хэшами?

Однако равно разнице в размерах между хранением хеш-функции в виде строки (это займет не менее 40 байтов, в зависимости от кодировки строки) и сохранением его в виде двоичных данных (это займет 20 байт). ).

Вы можете переключиться на другой алгоритм, как уже отмечали другие, но это не может быть хорошим выбором с точки зрения безопасности - чем меньше длина вывода алгоритма хеширования, тем он слабее.

...