Пожалуйста, помогите мне выбрать хэш - PullRequest
2 голосов
/ 06 июня 2011

Я пытаюсь создать хэш для строки из 10 или 16 байтов. Эти строки представляют собой либо локальный MAC-адрес + IP-адрес (6 + 4 байта), либо просто IP-адрес IPv6 (16 байтов).

В идеале я бы хотел сохранить свой пирог и съесть его. Абсолютный минимум столкновений будет приоритетом. Хеш должен иметь длину менее 16 байт и быть достаточно быстрым.

Есть идеи, с чего мне начать?

Ответы [ 2 ]

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

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

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

Этот вопрос является своего рода дубликатом Быстрого алгоритма хеширования строк с низкой частотой столкновений с 32-битным целым числом . Если вам важна скорость, начните с ссылок. (MurmurHash, похоже, является консенсусным выбором.)

Если производительность не имеет большого значения, просто возьмите библиотеку SHA-1 и используйте первые 16 из 20 байтов вывода. Это тривиально для кода, использующего библиотеку, и настолько устойчиво, насколько это возможно, к столкновениям.

[править]

Как отмечает Джон Флэтнесс в комментарии, MD5 также будет отвечать всем требованиям. Я подозреваю, что в наши дни легче будет найти библиотеки SHA-1, чем MD5 (так как MD5 был взломан несколько лет назад), но в зависимости от того, что у вас есть, все будет в порядке, поскольку это не криптографическое приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...