This documentation is archived and is not being maintained.

RSACryptoServiceProvider Constructor (Int32, CspParameters)

Initializes a new instance of the RSACryptoServiceProvider class with the specified key size and parameters.

Namespace:  System.Security.Cryptography
Assembly:  mscorlib (in mscorlib.dll)

public:
RSACryptoServiceProvider(
	int dwKeySize, 
	CspParameters^ parameters
)

Parameters

dwKeySize
Type: System::Int32

The size of the key to use in bits.

parameters
Type: System.Security.Cryptography::CspParameters

The parameters to be passed to the cryptographic service provider (CSP).

ExceptionCondition
CryptographicException

The CSP cannot be acquired.

-or-

The key cannot be created.

This constructor creates or reuses a key container specified using the KeyContainerName field of the parameters parameter.

By default, this constructor creates an Exchange key pair suitable to encrypt session keys so that they can be safely stored and exchanged with other users. The generated key corresponds to a key generated using the AT_KEYEXCHANGE value used in the unmanaged Microsoft Cryptographic API (CAPI).

You can create a Signature key pair suitable for authenticating (digitally signed) messages or files by setting the KeyNumber field of the parameters parameter to the Signature value. This type of key corresponds to the AT_SIGNATURE value used in CAPI.

If you create an RSACryptoServiceProvider object with the Exchange value specified and then create another RSACryptoServiceProvider object with the Signature value specified, both keys will be placed in a single container if both objects specify the same key container name.

To create a key that is compatible with stong-name signing using the RSACryptoServiceProvider class, you must create a Signature key pair.

The following code example creates a RSACryptoServiceProvider, generates a new key, and stores it in a key container.

using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Text;
void RSAPersistKeyInCSP( String^ ContainerName )
{
   try
   {

      // Create a new instance of CspParameters.  Pass 
      // 13 to specify a DSA container or 1 to specify 
      // an RSA container.  The default is 1.
      CspParameters^ cspParams = gcnew CspParameters;

      // Specify the container name using the passed variable.
      cspParams->KeyContainerName = ContainerName;

      //Create a new instance of RSACryptoServiceProvider to generate 
      //a new key pair.  Pass the CspParameters class to persist the  
      //key in the container.  Pass an intger of 2048 to specify the  
      //key-size.
      RSACryptoServiceProvider^ RSAalg = gcnew RSACryptoServiceProvider( 2048,cspParams );

      //Indicate that the key was persisted.
      Console::WriteLine( "The RSA key with a key-size of {0} was persisted in the container, \"{1}\".", RSAalg->KeySize, ContainerName );
   }
   catch ( CryptographicException^ e ) 
   {
      Console::WriteLine( e->Message );
   }

}

void RSADeleteKeyInCSP( String^ ContainerName )
{
   try
   {

      // Create a new instance of CspParameters.  Pass 
      // 13 to specify a DSA container or 1 to specify 
      // an RSA container.  The default is 1.
      CspParameters^ cspParams = gcnew CspParameters;

      // Specify the container name using the passed variable.
      cspParams->KeyContainerName = ContainerName;

      //Create a new instance of DSACryptoServiceProvider.  
      //Pass the CspParameters class to use the  
      //key in the container.
      RSACryptoServiceProvider^ RSAalg = gcnew RSACryptoServiceProvider( cspParams );

      //Delete the key entry in the container.
      RSAalg->PersistKeyInCsp = false;

      //Call Clear to release resources and delete the key from the container.
      RSAalg->Clear();

      //Indicate that the key was persisted.
      Console::WriteLine( "The RSA key was deleted from the container, \"{0}\".", ContainerName );
   }
   catch ( CryptographicException^ e ) 
   {
      Console::WriteLine( e->Message );
   }

}

array<Byte>^ RSAEncrypt( array<Byte>^DataToEncrypt, String^ ContainerName, bool DoOAEPPadding )
{
   try
   {

      // Create a new instance of CspParameters.  Pass 
      // 13 to specify a DSA container or 1 to specify 
      // an RSA container.  The default is 1.
      CspParameters^ cspParams = gcnew CspParameters;

      // Specify the container name using the passed variable.
      cspParams->KeyContainerName = ContainerName;

      //Create a new instance of DSACryptoServiceProvider. 
      //Pass the CspParameters class to use the key  
      //from the key in the container.
      RSACryptoServiceProvider^ RSAalg = gcnew RSACryptoServiceProvider( cspParams );

      //Encrypt the passed byte array and specify OAEP padding.   
      //OAEP padding is only available on Microsoft Windows XP or 
      //later.   
      return RSAalg->Encrypt( DataToEncrypt, DoOAEPPadding );
   }
   //Catch and display a CryptographicException   
   //to the console. 
   catch ( CryptographicException^ e ) 
   {
      Console::WriteLine( e->Message );
      return nullptr;
   }

}

array<Byte>^ RSADecrypt( array<Byte>^DataToDecrypt, String^ ContainerName, bool DoOAEPPadding )
{
   try
   {

      // Create a new instance of CspParameters.  Pass 
      // 13 to specify a DSA container or 1 to specify 
      // an RSA container.  The default is 1.
      CspParameters^ cspParams = gcnew CspParameters;

      // Specify the container name using the passed variable.
      cspParams->KeyContainerName = ContainerName;

      //Create a new instance of DSACryptoServiceProvider. 
      //Pass the CspParameters class to use the key  
      //from the key in the container.
      RSACryptoServiceProvider^ RSAalg = gcnew RSACryptoServiceProvider( cspParams );

      //Decrypt the passed byte array and specify OAEP padding.   
      //OAEP padding is only available on Microsoft Windows XP or 
      //later.   
      return RSAalg->Decrypt( DataToDecrypt, DoOAEPPadding );
   }
   //Catch and display a CryptographicException   
   //to the console. 
   catch ( CryptographicException^ e ) 
   {
      Console::WriteLine( e );
      return nullptr;
   }

}

int main()
{
   try
   {
      String^ KeyContainerName = "MyKeyContainer";

      //Create a new key and persist it in  
      //the key container.
      RSAPersistKeyInCSP( KeyContainerName );

      //Create a UnicodeEncoder to convert between byte array and string.
      UnicodeEncoding^ ByteConverter = gcnew UnicodeEncoding;

      //Create byte arrays to hold original, encrypted, and decrypted data. 
      array<Byte>^dataToEncrypt = ByteConverter->GetBytes( "Data to Encrypt" );
      array<Byte>^encryptedData;
      array<Byte>^decryptedData;

      //Pass the data to ENCRYPT, the name of the key container, 
      //and a boolean flag specifying no OAEP padding.
      encryptedData = RSAEncrypt( dataToEncrypt, KeyContainerName, false );

      //Pass the data to DECRYPT, the name of the key container, 
      //and a boolean flag specifying no OAEP padding.
      decryptedData = RSADecrypt( encryptedData, KeyContainerName, false );

      //Display the decrypted plaintext to the console. 
      Console::WriteLine( "Decrypted plaintext: {0}", ByteConverter->GetString( decryptedData ) );
      RSADeleteKeyInCSP( KeyContainerName );
   }
   catch ( ArgumentNullException^ ) 
   {

      //Catch this exception in case the encryption did 
      //not succeed.
      Console::WriteLine( "Encryption failed." );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 3.5, 2.0
Show: