Эд Хабер сказал
Я бы использовал AES для массовых данных
шифрование и RSA для шифрования
Ключ AES. Если данные достаточно малы
затем просто зашифровать все это
RSA.
Я думаю, что это хорошее решение. Я хотел бы, чтобы ваше приложение опубликовало API для получения открытого ключа RSA. Когда я третья сторона хочет отправить вам что-то, она получает открытый ключ. Затем он генерирует сеансовый ключ для выполнения фактического шифрования с использованием блочного шифра (то есть AES) и отправляет вам ключ с помощью шифрования с помощью вашего открытого ключа. Вы дешифруете сеансовый ключ своим закрытым ключом. Затем третье лицо шифрует данные, которые хочет отправить вам, с помощью AES (используя схему заполнения, которую вы также публикуете) и отправляет ее вам. Вы расшифровываете его, используя ключ сессии.
Есть некоторые проблемы с методом выше. Поскольку вы не отправляете никакой информации (кроме публикации своего открытого ключа, вы не можете контролировать, как генерируется ключ сеанса. Это означает, что третьи стороны могут использовать очень небезопасные способы генерации ключа сеанса, и вы никогда не узнаете. Вторая проблема каждый, кто хочет отправить вам данные, должен дополнять данные для AES так же, как вы. Поэтому вам нужно убедиться, что все координируются. Вторая проблема не слишком большая, но первая может быть проблемой особенно если вы не слишком доверяете сторонним разработчикам для создания действительно хороших ключей сеанса из хорошего криптографически безопасного генератора случайных чисел