Вопрос

При вызове следующей функции:

byte[] bytes = rsa.Encrypt(System.Text.UTF8Encoding.UTF8.GetBytes(stringToEncrypt), true);

Теперь я получаю ошибку: плохая длина.

С помощью меньшей строки это работает, любые идеи, какая проблема может быть строкой, которую я передаю, составляет менее 200 символов.

Это было полезно?

Решение

Шифрование RSA является средним только для небольших объемов данных, объем данных, которые вы можете шифровать, зависит от размера используемого вами ключа, например, для 1024 -битных клавиш RSA, и PKCS # 1 v1.5 Padding, вы можете зашифровать 117 байтов максимум, с ключом RSA 2048, вы можете зашифровать 245 байтов.

Для этого есть веская причина, асимметричное шифрование является вычислительно дорогим. Если вы хотите зашифровать большие объемы данных, вы должны использовать симметричное шифрование. Но что, если вы хотите не повторно? Ну, то, что вы тогда делаете, это используете оба. Вы создаете симметричный ключ и обменяете его с помощью асимметричного шифрования, а затем безопасно обмененный симметричным ключом для шифрования ваших больших объемов данных. Это то, что используют SSL и WS-Secure под крышками.

Другие советы

Для будущих поисков, касающихся исключений RSA плохой длины ...

Вы можете рассчитать максимальное количество байтов, которые можно зашифровать с определенным размером ключа со следующим:

((KeySize - 384) / 8) + 37

Однако, если параметр оптимальной асимметричной заполнения шифрования (OAEP) верен, как и в исходном посте, можно использовать следующее, для расчета максимальных байтов:

((KeySize - 384) / 8) + 7

Размеры юридических ключей составляют 384 до 16384 года с размером пропуска 8.

Как объяснено выше, решение исключений типа «плохой длины» заключается в гибридизации использования симметричного и асимметричного шифрования, так что размер текста, который вы шифруете, не ограничивается размером ключа. Вы в основном используете шифрование RSA, чтобы асимметрично шифровать случайный ключ .

Для шифрования:

  1. Создайте случайный ключ длины, необходимой для метода симметричного шифрования, такой как AES или Rijndael.

  2. Симметрично шифруйте ваш текст/данные, используя AES/Rijndael, используя случайный ключ, сгенерированный на шаге 1.

  3. Используя RSA, асимметрично шифрует случайный ключ, сгенерированный на шаге 1.

Для дешифрования:

  1. Сначала расшифровывает случайный ключ, генерируемый AES/Rijndael, используя свой частный ключ RSA.

  2. Затем расшифровку исходного текста/данных, используя случайный RSA-декоративный ключ

Для демонстрации вы можете посмотреть этот следующий пример в C#:

http://www.technical-recipes.com/2013/using-rsa-to- Encrypt-large-data-files-in-c/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top