Алгоритм хеширования с буквенно-цифровым выводом не более 20 символов - PullRequest
10 голосов
/ 28 января 2011

Мне нужен алгоритм хеширования, который выводит буквенно-цифровую строку длиной не более 20 символов.Для «буквенно-цифровой» я имею в виду [a-zA-Z0-9].

Входные данные UUID с в канонической форме (пример 550e8400-e29b-41d4-a716-446655440000)

В альтернативном варианте есть способ преобразоватьХэш SHA1 или MD5 для строки с этими ограничениями?

Спасибо.

РЕДАКТИРОВАТЬ

Не требует криптографической защиты.Столкновения делают данные неточными, но если они случаются спорадически, я могу с этим смириться.

РЕДАКТИРОВАТЬ 2

Я не знаю, приведет ли к обрезанию MD5 или SHA1 столкновенияслишком часто.Теперь мне интересно, лучше ли урезать до 20 символов значение MD5 или значение SHA1.

1 Ответ

16 голосов
/ 28 января 2011

Просто вырежьте ненужные символы из хеша GUID. При хорошей хэш-функции непредсказуемость любой части хеша пропорциональна размеру этой части. Если вы хотите, вы можете закодировать его основанием 32 вместо стандартного шестнадцатеричного основания 16. Имейте в виду, что это не значительно улучшит энтропию на символ (только на 25%).

Для не криптографических применений не имеет значения, усекаете ли вы MD5, SHA1 или SHA2. Ни у одного нет явных недостатков в энтропии.

...