Давайте формализуем вашу проблему, чтобы лучше ее изучить.
Пусть k
- это ключ из набора K возможных ключей, а (w, x, y)
- информация из набора I, которую нам необходимо зашифровать. Давайте определим набор «зашифрованных сообщений» как A 8 , где A - алфавит, из которого мы извлекаем символы в наше зашифрованное сообщение (A = {0, 1, ..., 9, a , b, ..., z, ...}, в зависимости от ваших характеристик, как вы сказали).
Мы определяем две функции:
crypt: I * K --> A^8.
decrypt A^8 * K --> I
Проблема здесь в том, что размер набора зашифрованных сообщений A ^ 8 может быть меньше, чем набор фрагментов информации (w, x, y). Если это так, просто невозможно достичь того, что вы ищете, если мы не попробуем что-то другое ...
Предположим, что только ВЫ (или ваш сервер, или ваше приложение на вашем сервере) должны иметь возможность вычислять (w, x, y) из z. То есть вы можете отправить z
кому-то, и вам все равно, что они не смогут его расшифровать.
В этом случае вы можете использовать базу данных на своем сервере. Вы зашифруете информацию, используя известный алгоритм, а затем сгенерируете случайное число z
. Вы определяете таблицу:
Id: char[8]
CryptedInformation: byte[]
Затем вы сохраните z
в столбце Id, а зашифрованную информацию в соответствующем столбце.
Когда вам нужно расшифровать информацию, кто-то даст вам z
, индекс зашифрованной информации, а затем вы можете приступить к расшифровке.
Однако, если это работает для вас, вам может даже не понадобиться шифровать информацию, у вас может быть таблица:
Id: char[8]
Integer: int
Username: char[]
Timestamp: DateTime
И использовать тот же метод, ничего не расшифровывая.
Это может быть применено, например, к «системе проверки электронной почты» в процессе подписки. Ссылка, которую вы отправите пользователю по почте, будет содержать z
.
Надеюсь, это поможет.