Хеширование SMTP и NNTP сообщений? - PullRequest
2 голосов
/ 02 марта 2010

Я хочу сохранить и проиндексировать всю свою историческую электронную почту и новости как отдельные файлы сообщений, используя некоторый вычисленный хэш-код, основанный на теле сообщения + заголовки. Тогда я буду индексировать и другие вещи - для поиска.

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

Помимо тела, какие заголовки я должен индексировать? Или, в более общем смысле, какие преобразования следует применить к копии сообщения в памяти перед хэшированием?

Должен ли я игнорировать заголовки "ReSent- *:"? Стоит ли объединять ломаные заголовки в однострочные и удалять лишние пробелы?

(Причина, по которой я хочу индексировать сообщения на основе заголовка, а не заголовка идентификатора сообщения, заключается в том, что заголовки идентификатора сообщения не имеют одинакового формата.)

1 Ответ

1 голос
/ 02 марта 2010

Вы должны хешировать именно то, что составляет уникальность сообщения. Если два сообщения могут отличаться наличием заголовков «ReSent- *:», но все же должны рассматриваться как «одно и то же» сообщение, то эти заголовки не должны быть частью того, что хэшируется. Точно так же, если одинаковые сообщения могут отличаться по синтаксису заголовка, вам следует нормализовать синтаксис заголовка. Хеш-функции, такие как SHA-1, возвращают один и тот же выход, только если вход точно одинаков, каждый его бит.

Теперь, если вам достаточно использовать Message-ID, если не считать проблемы с форматированием, есть простой способ: просто хешируйте Message-ID. У хэшированного идентификатора сообщения будет обычный, фиксированный размер, рандомизированный формат, в котором вы можете индексировать.

...