Mono Class Library: System.Security.Cryptography.RSACryptoServiceProvider Overview | Members

System.Security.Cryptography.RSACryptoServiceProvider.Encrypt Method

Encrypt the provided data using the public key and the specified padding mechanism. [Edit]

public byte[] Encrypt (byte[] rgb, bool fOAEP)

Parameters

rgb
The data to be encrypted. [Edit]
fOAEP
True to use the OAEP padding, false to use PKCS#1 padding. [Edit]

Returns

An array of bytes containing the encrypted data. [Edit]

Remarks

RSA isn't normally used to do bulk encryption. The two main reasons are length restriction (public key size and padding limit the maximum length of data that can be encrypted in a single operation) and performance (as RSA is very slow compared to most symmetric ciphers).

The following example shows how to combine the use of RSA and a symmetric cipher, Rjindael, to "quickly" encrypt data of an unlimited length.

C# Example
static byte[] Encrypt (RSA rsa, byte[] input) 
{
     // by default this will create a 128 bits AES (Rijndael) object
     SymmetricAlgorithm sa = SymmetricAlgorithm.Create ();
     ICryptoTransform ct = sa.CreateEncryptor ();
     byte[] encrypt = ct.TransformFinalBlock (input, 0, input.Length);

     RSAPKCS1KeyExchangeFormatter fmt = new RSAPKCS1KeyExchangeFormatter (rsa);
     byte[] keyex = fmt.CreateKeyExchange (sa.Key);

     // return the key exchange, the IV (public) and encrypted data
     byte[] result = new byte [keyex.Length + sa.IV.Length + encrypt.Length];
     Buffer.BlockCopy (keyex, 0, result, 0, keyex.Length);
     Buffer.BlockCopy (sa.IV, 0, result, keyex.Length, sa.IV.Length);
     Buffer.BlockCopy (encrypt, 0, result, keyex.Length + sa.IV.Length, encrypt.Length);
     return result;
}
  

Interoperability warning: Microsoft CryptoAPI only supports OAEP since Windows XP.

[Edit]

Requirements

Namespace: System.Security.Cryptography
Assembly: mscorlib (in mscorlib.dll)
Assembly Versions: 1.0.5000.0, 2.0.0.0