Обычно IV передается путем добавления его к зашифрованному тексту.Итак, в конце концов вы отправляете одну строку в кодировке Base64.
Итак, если вы беспокоитесь о том, чтобы разорвать контракт, отправив два поля (один IV и один зашифрованный текст) вместо отправки только одного поля, позвольте мне заверить вас, что вы собираетесь отправить только одно поле,И логика дешифрования знает, как извлечь IV из полученной строки и использовать его в процессе расшифровки.
Обратите внимание, что между IV и ключом есть некоторые ключевые различия:
- Ключявляется секретным, IV не является
- Многие сообщения могут быть зашифрованы одним и тем же ключом, но IV отличается для каждого нового сообщения.Комбинация ключа и IV должна быть уникальной для каждого сообщения, а IV также должна быть случайной
Следовательно, вы не разделяете IV так же, как ключ.Поскольку IV изменяется для каждого сообщения, оно фактически добавляется к зашифрованному тексту, образуя единую строку, которая затем отправляется как зашифрованный вывод.Таким образом, логика дешифрования принимает на вход только ключ и ваш зашифрованный вывод;он знает, как извлечь IV и зашифрованный текст из зашифрованного вывода.
На сегодняшний день, если кому-то нужно зашифровать что-либо с помощью AES, обычным выбором является аутентифицированный режим шифрования, такой как GCM, который обеспечивает не только конфиденциальность, но итакже целостность безопасным способом.
Если только получатель (в вашем случае) не указывает жестко конкретный режим для AES, по умолчанию всегда будет AES с GCM.И даже если получатель предлагает какой-либо режим, который не является режимом аутентифицированного шифрования, вы можете объяснить ему преимущества использования режима аутентифицированного шифрования.
Вы найдете полную реализацию Java с подробным объяснением здесь .
Вы также можете прочитать это вместе с комментариями, чтобы лучше это понять.