2011-12-28 3 views
3

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

Это мое требование:

hash_code = hash_function(element 1, element 2, ...... element n) 

я должен быть возможность получить

bool b = is_valid_hash(hash_code, element x) 

функцию is_valid_hash должен быть в состоянии сказать мне погоду «element x» был элемент принят в hash_function

Каково имя для таких хеш-функций? Один хэш должен иметь возможность сопоставлять несколько элементов (не столкновений).

+0

Это большой вопрос! Любое решение, скорее всего, связано с [гомоморфным шифрованием] (http://en.wikipedia.org/wiki/Homomorphic_encryption), поэтому, если нет реализации OOTB этого, это может быть лучше перенесено на crypto.SE. – pdubs

+0

Вам нужна истинная хеш-функция, которая не обратима и безопасна? –

+2

Я не знаю, как они вызывается, но я бы назвал их «set enheration hash functions». Принимая Prime номер для каждого элемента и умножая его (сколько возможных элементов есть?) Кажется логичным. (с особым личным значением хэша для каждого возможного элемента называется * Zobrist * hashing, BTW) – wildplasser

ответ

0

Предполагая, что hash_function является стандартным алгоритмом хэширования (md5 и т. Д.), Это невозможно. Однако, если это пользовательская функция вы можете сделать это одним из двух способов:

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

  2. Аналогично, hash_function может возвращать массив хэшей ... если вам нужна строка или проблема безопасности, вы также можете вернуть двухсторонний зашифрованный сериализованный массив ... это может быть затем дешифровано и неэтериализовано в is_valid_hash(), и вы можете проверить, есть ли хэш элемента x находится в массив.

+0

Он не запрашивает реализацию, только для * имени * этого конкретного поля. – wildplasser

+0

Хорошая точка. Спасибо за разъяснения –