Как создать хеш, который похож на аналогичный ввод? - PullRequest
6 голосов
/ 27 ноября 2011

Я хочу создать базу данных с файлами.И, чтобы легко искать эти файлы, я хочу использовать какую-то технику хеширования.Тем не менее, я не только хочу найти файлы, которые ТОЧНО одинаковы, но и проверить, являются ли части файлов одинаковыми (то есть файлы похожи).другими словами, похожие файлы должны иметь похожие хеши.

Это означает, что этот вид хеша на самом деле не является криптографическим хешем, потому что не должно быть «лавинного эффекта» (лавинный эффект означает, что каждый бит данных влияет на ВСЕ другие биты других данных.)

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

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

  • (почти) не имеет коллизий

  • Создает аналогичный вывод для аналогичных входов

  • Короче, чем исходный файл (в противном случае было бы проще просто сравнить исходные файлы).

Я думал о чем-то вродедобавление первых двух символов вместе, затем добавление 3-го и 4-го вместе и т. д. Однако, это имеет ОГРОМНОЕ количество столкновений, поскольку «1 + 4» совпадает с «2 + 2» и т. д.

Iна самом деле понятия не имею, как Начните.Может ли кто-нибудь просветить меня, пожалуйста?:)

Ответы [ 2 ]

3 голосов
/ 27 ноября 2011

Это обычно называется проблемой обнаружение дубликатов , и ее нелегко решить;Я бы порекомендовал алгоритм simhash (код здесь ).

1 голос
/ 23 октября 2012

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

Я также читал, что sdhash лучше, чем ssdeep.

...