У меня есть модуль и показатель степени RSA, я хочу сгенерировать открытый ключ с этими компонентами. Затем я хочу зашифровать данные с помощью этого открытого ключа.
Итак, я написал эту функцию:
public static byte[] EncryptRSA(byte[] rsaModulus, byte[] exponent, byte[] data)
{
byte[] response = null;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
RSAParameters rsaPar = rsa.ExportParameters(false);
rsaPar.Modulus = rsaModulus;
rsaPar.Exponent = exponent;
rsa.ImportParameters(rsaPar);
response = rsa.Encrypt(data, false);
return response;
}
но метод rsa.ExportParameters занимает много времени.
public RSACryptoServiceProvider ()
: this (1024)
{
// Here it's not clear if we need to generate a keypair
// (note: MS implementation generates a keypair in this case).
// However we:
// (a) often use this constructor to import an existing keypair.
// (b) take a LOT of time to generate the RSA keypair
// So we'll generate the keypair only when (and if) it's being
// used (or exported). This should save us a lot of time (at
// least in the unit tests).
}
Как видите, метод ExportParameters() выполняет генерацию пары ключей RSA, что требует много времени.
После этого я получаю исключение «Несоответствие закрытого/открытого ключа» при импорте параметров RSA.
private const bool PKCS1_1_5_PADDING = false;
сделать код как минимум читабельным при вызовеEncrypt
. - person Maarten Bodewes   schedule 15.05.2014