Мне нужен алгоритм, который может выполнять взаимно однозначное сопоставление (т.е. отсутствие столкновения) 32-разрядного целого числа со знаком на другое 32-разрядное целое число со знаком.
Моя настоящая забота - достаточно энтропии, так что выход функции представляется случайным. В основном я ищу шифр, похожий на XOR Cipher, но который может генерировать более произвольно выглядящие выходы. Безопасность - это не моя реальная проблема, хотя неясно.
Изменить для уточнения цели:
- Алгоритм должен быть симметричным, чтобы я мог отменить операцию без пары ключей.
- Алгоритм должен быть биективным, каждый 32-разрядный номер ввода должен генерировать 32-битный уникальный номер.
- Вывод функции должен быть достаточно скрытым, добавление только одного к входу должно сильно повлиять на вывод.
Пример ожидаемого результата:
F (100) = 98456
F (101) = -758
F (102) = 10875498
F (103) = 986541
F (104) = 945451245
F (105) = -488554
Как и MD5, изменение одной вещи может изменить многое.
Я ищу математическую функцию, поэтому ручное сопоставление целых чисел для меня не является решением. Для тех, кто спрашивает, скорость алгоритма не очень важна.