Show DevBest [C++] RSA Encryption routine

Status
Not open for further replies.

Adil

DevBest CEO
May 28, 2011
1,278
716

Code:
[LIST=1]
[*]using namespace System;
[*]using namespace System::Security::Cryptography;
[*]using namespace System::Text;
[*]array<Byte>^ RSAEncrypt( array<Byte>^DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding )
[*]{
[*]   try
[*]   {
[*] 
[*]      //Create a new instance of RSACryptoServiceProvider.
[*]      RSACryptoServiceProvider^ RSA = gcnew RSACryptoServiceProvider;
[*] 
[*]      //Import the RSA Key information. This only needs
[*]      //toinclude the public key information.
[*]      RSA->ImportParameters( RSAKeyInfo );
[*] 
[*]      //Encrypt the passed byte array and specify OAEP padding.  
[*]      //OAEP padding is only available on Microsoft Windows XP or
[*]      //later.  
[*] 
[*]      array<Byte>^encryptedData = RSA->Encrypt( DataToEncrypt, DoOAEPPadding );
[*]          delete RSA;
[*]          return encryptedData;
[*]   }
[*]   //Catch and display a CryptographicException  
[*]   //to the console.
[*]   catch ( CryptographicException^ e ) 
[*]   {
[*]      Console::WriteLine( e->Message );
[*]      return nullptr;
[*]   }
[*] 
[*]}
[*] 
[*]array<Byte>^ RSADecrypt( array<Byte>^DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding )
[*]{
[*]   try
[*]   {
[*] 
[*]      //Create a new instance of RSACryptoServiceProvider.
[*]      RSACryptoServiceProvider^ RSA = gcnew RSACryptoServiceProvider;
[*] 
[*]      //Import the RSA Key information. This needs
[*]      //to include the private key information.
[*]      RSA->ImportParameters( RSAKeyInfo );
[*] 
[*]      //Decrypt the passed byte array and specify OAEP padding.  
[*]      //OAEP padding is only available on Microsoft Windows XP or
[*]      //later.  
[*]          
[*]      array<Byte>^decryptedData = RSA->Decrypt( DataToDecrypt, DoOAEPPadding );
[*]      delete RSA;
[*]          return decryptedData;
[*]   }
[*]   //Catch and display a CryptographicException  
[*]   //to the console.
[*]   catch ( CryptographicException^ e ) 
[*]   {
[*]      Console::WriteLine( e );
[*]      return nullptr;
[*]   }
[*] 
[*]}
[*] 
[*]int main()
[*]{
[*]   try
[*]   {
[*] 
[*]      //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;
[*] 
[*]      //Create a new instance of RSACryptoServiceProvider to generate
[*]      //public and private key data.
[*]      RSACryptoServiceProvider^ RSA = gcnew RSACryptoServiceProvider;
[*] 
[*]      //Pass the data to ENCRYPT, the public key information 
[*]      //(using RSACryptoServiceProvider.ExportParameters(false),
[*]      //and a boolean flag specifying no OAEP padding.
[*]      encryptedData = RSAEncrypt( dataToEncrypt, RSA->ExportParameters( false ), false );
[*] 
[*]      //Pass the data to DECRYPT, the private key information 
[*]      //(using RSACryptoServiceProvider.ExportParameters(true),
[*]      //and a boolean flag specifying no OAEP padding.
[*]      decryptedData = RSADecrypt( encryptedData, RSA->ExportParameters( true ), false );
[*] 
[*]      //Display the decrypted plaintext to the console. 
[*]      Console::WriteLine( "Decrypted plaintext: {0}", ByteConverter->GetString( decryptedData ) );
[*]          delete RSA;
[*]   }
[*]   catch ( ArgumentNullException^ ) 
[*]   {
[*] 
[*]      //Catch this exception in case the encryption did
[*]      //not succeed.
[*]      Console::WriteLine( "Encryption failed." );
[*]   }
[*] 
[*]}

[/LIST]
 

Meap

Don't need glasses if you C#
Nov 7, 2010
1,045
296
Nice Code Adil
Keep up the goood work
you'll get far ;)
 
Status
Not open for further replies.

Users who are viewing this thread

Top