Я пытаюсь лучше понять классы криптографии в. Net и у меня есть ситуация, которую я не понимаю ясно. Я следую за урезанной версией этого RSACryptoServiceProvider .
моей сокращенной версии:
string plainText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus.";
var byteConverter = new UnicodeEncoding();
//Works with longer string length
using var rsa = RSA.Create();
byte[] encrypted2 = rsa.Encrypt(byteConverter.GetBytes(plainText), RSAEncryptionPadding.OaepSHA1);
//fails if string's length is too long
using var rsa2 = new RSACryptoServiceProvider();
byte[] encrypted = rsa2.Encrypt(byteConverter.GetBytes(plainText), false);
Если вы обрезаете строку в "elit" вот так:
string plainText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
, тогда оба сработают.
Когда я использую конструктор перегрузки провайдера и задаю ему достаточный размер ключа, вот так:
using var rsa2 = new RSACryptoServiceProvider(2048);
тогда может зашифровать всю длину строки.
Какая связь между размером ключа и длиной сообщения? Какой лучший способ определить, какой размер ключа мне нужен и зачем нужен RSA. Создать метод не имеет проблем с длиной строки?