Текущие хеш-функции предназначены для больших изменений хеш-функции, даже если изменяется только очень небольшая часть входных данных. Что мне нужно, так это хеш-алгоритм, выходная мутация которого будет прямо пропорциональна входной мутации. Например, мне нужно что-то похожее на это:
Hash("STR1") => 1000
Hash("STR2") => 1001
Hash("STR3") => 1002
Я плохо разбираюсь в алгоритмах, но никогда не слышал о такой реализации, хотя почти уверен, что кто-то уже должен был придумать этот алгоритм.
Мое текущее требование - иметь большой битрейт (возможно, 512 бит?), Чтобы избежать коллизий.
Спасибо
ОБНОВИТЬ
Думаю, мне следует прояснить свою цель, я вижу, что очень плохо справился с объяснением того, что мне нужно. Извините, я не носитель английского языка и отличный коммуникатор.
Так что в основном мне нужен этот алгоритм хеширования для поиска похожих двоичных файлов. Вы можете думать об этом как об алгоритме хеширования антивируса. Он вычисляет контрольную сумму файла, но в отличие от традиционных функций хеширования, даже после небольшой модификации двоичного файла вредоносной программы, он все еще может ее обнаружить. Это в значительной степени то, что я ищу.
Другой аспект - избежать столкновения. Позвольте мне объяснить, что я имею в виду под этим. Это не противоречивая цель. Я хочу, чтобы Hash («STR1») производил 1000, а Hash («STR2») производил 1001 или 1010, может быть, не имеет значения, пока значение близко к предыдущему хешу. Но хэш («Это очень большая строка или, может быть, даже двоичные данные» + 100 случайных символов) не должен давать значение, близкое к 1000. Я понимаю, что это не будет работать всегда, и будут некоторые конфликты хешей / хеш-диапазона, но Я думаю, что могу представить другой алгоритм хеширования и проверить оба, чтобы минимизировать коллизии.
Так что ты думаешь? Может, есть лучший способ достичь своей цели, может, я слишком многого прошу, я не знаю. Я плохо разбираюсь в криптографии, математике или алгоритмах.
Еще раз спасибо за ваше время и усилия