RSA шифрование больших данных блоками - PullRequest
0 голосов
/ 24 октября 2018

Для шифрования, дешифрования, подписи и проверки подписи я использую код отсюда DotnetCore.RSA

И он работал хорошо, пока я не начал работать с большим текстом.

Шифрование через RSA не работает с большим текстом.Большой - более 245 байт с ключом RSA 2048

У меня возникла исключительная ситуация при попытке зашифровать большой текст:

Сообщение об исключении: Interop.Crypto.OpenSslCryptographicException: 'error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size'

Функция шифрования:

public string Encrypt(string text) {
  if (_publicKeyRsaProvider == null) {
    throw new Exception("_publicKeyRsaProvider is null");
  }
  return Convert.ToBase64String(_publicKeyRsaProvider.Encrypt(Encoding.UTF8.GetBytes(text), RSAEncryptionPadding.Pkcs1));
}

Разработчик, написавший DotnetCore.RSA, предлагает разбить длинный текст на множество маленьких, зашифровать их отдельно и объединить их

Есть предложения, это нормально или нет?Может быть, предложить некоторые библиотеки для .net Core для шифрования RSA

1 Ответ

0 голосов
/ 26 октября 2018

Разработчик, написавший DotnetCore.RSA, предлагает разбить длинный текст на множество маленьких, зашифровать их отдельно и объединить их

Это не лучший подход (вежливо сказано).Обычный подход к работе с RSA (даже для более коротких входов) использует гибридное шифрование .

Причины такого подхода:

  • Шифрование RSA является МЕДЛЕННЫМ.Очень медленный по сравнению с симметричным.
  • даже для небольших выходных данных выход шифрования RSA намного длиннее
  • В некоторых ситуациях RSA (небольшое пространство сообщений) могут иметь некоторые недостатки

По сути, вы создаете случайныйключ шифрования, шифрование данных любой длины с использованием любого безопасного симметричного шифра (например, AES, 3DES, Salsa и т. д.), а затем использование RSA для шифрования симметричного ключа шифрования.

...