Обычно мы хотим, чтобы вывод шифрования выглядел случайным, поэтому я сомневаюсь, что существует какая-либо функция шифрования, которую вы хотите.
Но я думаю, что вы можете достичь своей цели с помощью двухэтапного процесса.
- Зашифруйте свои данные с помощью AES, используя соответствующий режим, такой как CBC или GCM. Этот этап отвечает за безопасность.
- Преобразуйте каждый блок зашифрованного текста AES в нужную вам форму. Здесь вы можете использовать любой алгоритм, который преобразует 128-битное целое число в векторный формат, соответствующий вашей цели. Вероятно, было бы удобно, если бы это могло обрабатывать 128-битные блоки, но если это слишком велико, вы можете разбить блок, скажем, на четыре 32-битных блока и обрабатывать каждый из меньших блоков отдельно. Затем получатель преобразует каждый вектор обратно в 32-битные блоки и объединяет четыре последовательных 32-битных блока, чтобы воссоздать исходный 128-битный блок зашифрованного текста AES, и передает этот блок соответствующему алгоритму дешифрования AES. На этом этапе данные только преобразуются в нужный формат и не предназначены для повышения безопасности.
В качестве примера алгоритма этапа 2 предположим, что мы хотим, чтобы наш вывод был значением у в многочлене у = х2 + 3. Итак, мы берем наш 128-битный блок зашифрованного текста AES с как целое число, вычислить о = с2 + 3, затем используйте о как наш окончательный результат. (Я подозреваю, что этот пример не совсем то, к чему вы стремитесь, но, надеюсь, укажет вам правильное направление).
Примечание. Убедитесь, что ваш алгоритм преобразования является обратимым (чтобы любой входящий о может быть однозначно преобразован обратно в исходный с) или расшифровка не будет работать должным образом.