Уменьшение длины MD5

Автор Slavegirl, 04 августа 2013, 13:49:55

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Slavegirl

Здравствуйте!

Я ищу способ сокращения длины результата работы функции md5() с целью экономии пространства под хранение этих результатов. По умолчанию данная функция генерирует строку, состоящую из 32 символов. Существует ли проверенный и безопасный способ уменьшение этой строки, например, до 16 символов (а лучше до 10)? Под "безопасный" я имею в виду минимизацию вероятности возникновения коллизий.

Речь идет не о безопасности сайта или хранении хэшированных паролей. Функция md5() используется для получения отпечатка неких данных, которые поступают в очередь, с дальнейшей проверкой на уникальность (чтобы в очередь не попадали данные, которые уже там присутствуют).

Всего используется 2 разные очереди:

- данные в первой очереди имеют средний размер 40-80 байт, максимальный размер очереди 50,000 элементов;
- данные во второй очереди имеют средний размер 1-2 Кбайт, максимальный размер очереди 10,000 элементов.

Одним из вариантов решения задачи рассматриваю простое усечение результата MD5, то есть, хранение только первых 16 символов хэша. Но у меня возник вопрос: действительно ли вероятность коллизии первой половины хэша будет равняться вероятности коллизии второй половины? Дело в том, что насколько я знаю, функция md5() итерационная, то есть результат хэширования последних блоков, на которое разбивается исходный текст, зависит от результатов вычислений над первыми блоками. Что можно ожидать в ситуации, когда первые части исходных сообщений будут иметь сравнительно похожее содержимое?

Попробую продемонстрировать вопрос более наглядно:

c15c49a8f55a3dd0da7c8eda0e7485f9

Равна ли вероятность коллизии в этих двух блоках?

А если разделить хэш на целых 3 части (по 10 символов), будет ли вероятность коллизии в этих частях одинаковой?

c15c49a8f55a3dd0da7c8eda0e7485f9

Заранее огромное спасибо за советы!

Жека

Цитата: Slavegirl от 04 августа 2013, 13:49:55Функция md5() используется для получения отпечатка неких данных, которые поступают в очередь, с дальнейшей проверкой на уникальность (чтобы в очередь не попадали данные, которые уже там присутствуют).
Юзать CRC32