TripleDESCryptoServiceProvider::CreateEncryptor Method (array<Byte>^, array<Byte>^)
Creates a symmetric TripleDES encryptor object with the specified key (Key) and initialization vector (IV).
Assembly: mscorlib (in mscorlib.dll)
public: virtual ICryptoTransform^ CreateEncryptor( array<unsigned char>^ rgbKey, array<unsigned char>^ rgbIV ) override
Parameters
- rgbKey
-
Type:
array<System::Byte>^
The secret key to use for the symmetric algorithm.
- rgbIV
-
Type:
array<System::Byte>^
The initialization vector to use for the symmetric algorithm.
Note The initialization vector must be 8 bytes long. If it is longer than 8 bytes, it is truncated and an exception is not thrown. Before you call CreateEncryptor, check the length of the initialization vector and throw an exception if it is too long.
Return Value
Type: System.Security.Cryptography::ICryptoTransform^A symmetric TripleDES encryptor object.
| Exception | Condition |
|---|---|
| CryptographicException | The value of the Mode property is OFB. -or- The value of the Mode property is CFB and the value of the FeedbackSize property is not 8. -or- An invalid key size was used. -or- The algorithm key size was not available. |
Use the CreateDecryptor overload with the same parameters to decrypt the result of this method.
The following code example creates a TripleDESCryptoServiceProvider object and uses it to encrypt and decrypt data in a file.
using namespace System; using namespace System::Security::Cryptography; using namespace System::Text; using namespace System::IO; void EncryptTextToFile( String^ Data, String^ FileName, array<Byte>^Key, array<Byte>^IV ) { try { // Create or open the specified file. FileStream^ fStream = File::Open( FileName, FileMode::OpenOrCreate ); // Create a CryptoStream using the FileStream // and the passed key and initialization vector (IV). CryptoStream^ cStream = gcnew CryptoStream( fStream,(gcnew TripleDESCryptoServiceProvider)->CreateEncryptor( Key, IV ),CryptoStreamMode::Write ); // Create a StreamWriter using the CryptoStream. StreamWriter^ sWriter = gcnew StreamWriter( cStream ); // Write the data to the stream // to encrypt it. sWriter->WriteLine( Data ); // Close the streams and // close the file. sWriter->Close(); cStream->Close(); fStream->Close(); } catch ( CryptographicException^ e ) { Console::WriteLine( "A Cryptographic error occurred: {0}", e->Message ); } catch ( UnauthorizedAccessException^ e ) { Console::WriteLine( "A file access error occurred: {0}", e->Message ); } } String^ DecryptTextFromFile( String^ FileName, array<Byte>^Key, array<Byte>^IV ) { try { // Create or open the specified file. FileStream^ fStream = File::Open( FileName, FileMode::OpenOrCreate ); // Create a CryptoStream using the FileStream // and the passed key and initialization vector (IV). CryptoStream^ cStream = gcnew CryptoStream( fStream,(gcnew TripleDESCryptoServiceProvider)->CreateDecryptor( Key, IV ),CryptoStreamMode::Read ); // Create a StreamReader using the CryptoStream. StreamReader^ sReader = gcnew StreamReader( cStream ); // Read the data from the stream // to decrypt it. String^ val = sReader->ReadLine(); // Close the streams and // close the file. sReader->Close(); cStream->Close(); fStream->Close(); // Return the string. return val; } catch ( CryptographicException^ e ) { Console::WriteLine( "A Cryptographic error occurred: {0}", e->Message ); return nullptr; } catch ( UnauthorizedAccessException^ e ) { Console::WriteLine( "A file access error occurred: {0}", e->Message ); return nullptr; } } int main() { try { // Create a new TripleDESCryptoServiceProvider object // to generate a key and initialization vector (IV). TripleDESCryptoServiceProvider^ tDESalg = gcnew TripleDESCryptoServiceProvider; // Create a string to encrypt. String^ sData = "Here is some data to encrypt."; String^ FileName = "CText.txt"; // Encrypt text to a file using the file name, key, and IV. EncryptTextToFile( sData, FileName, tDESalg->Key, tDESalg->IV ); // Decrypt the text from a file using the file name, key, and IV. String^ Final = DecryptTextFromFile( FileName, tDESalg->Key, tDESalg->IV ); // Display the decrypted string to the console. Console::WriteLine( Final ); } catch ( Exception^ e ) { Console::WriteLine( e->Message ); } }
The following code example creates a TripleDESCryptoServiceProvider object and uses it to encrypt and decrypt data in memory.
using namespace System; using namespace System::Security::Cryptography; using namespace System::Text; using namespace System::IO; array<Byte>^ EncryptTextToMemory( String^ Data, array<Byte>^Key, array<Byte>^IV ) { try { // Create a MemoryStream. MemoryStream^ mStream = gcnew MemoryStream; // Create a CryptoStream using the MemoryStream // and the passed key and initialization vector (IV). CryptoStream^ cStream = gcnew CryptoStream( mStream,(gcnew TripleDESCryptoServiceProvider)->CreateEncryptor( Key, IV ),CryptoStreamMode::Write ); // Convert the passed string to a byte array. array<Byte>^toEncrypt = (gcnew ASCIIEncoding)->GetBytes( Data ); // Write the byte array to the crypto stream and flush it. cStream->Write( toEncrypt, 0, toEncrypt->Length ); cStream->FlushFinalBlock(); // Get an array of bytes from the // MemoryStream that holds the // encrypted data. array<Byte>^ret = mStream->ToArray(); // Close the streams. cStream->Close(); mStream->Close(); // Return the encrypted buffer. return ret; } catch ( CryptographicException^ e ) { Console::WriteLine( "A Cryptographic error occurred: {0}", e->Message ); return nullptr; } } String^ DecryptTextFromMemory( array<Byte>^Data, array<Byte>^Key, array<Byte>^IV ) { try { // Create a new MemoryStream using the passed // array of encrypted data. MemoryStream^ msDecrypt = gcnew MemoryStream( Data ); // Create a CryptoStream using the MemoryStream // and the passed key and initialization vector (IV). CryptoStream^ csDecrypt = gcnew CryptoStream( msDecrypt,(gcnew TripleDESCryptoServiceProvider)->CreateDecryptor( Key, IV ),CryptoStreamMode::Read ); // Create buffer to hold the decrypted data. array<Byte>^fromEncrypt = gcnew array<Byte>(Data->Length); // Read the decrypted data out of the crypto stream // and place it into the temporary buffer. csDecrypt->Read( fromEncrypt, 0, fromEncrypt->Length ); //Convert the buffer into a string and return it. return (gcnew ASCIIEncoding)->GetString( fromEncrypt ); } catch ( CryptographicException^ e ) { Console::WriteLine( "A Cryptographic error occurred: {0}", e->Message ); return nullptr; } } int main() { try { // Create a new TripleDESCryptoServiceProvider object // to generate a key and initialization vector (IV). TripleDESCryptoServiceProvider^ tDESalg = gcnew TripleDESCryptoServiceProvider; // Create a string to encrypt. String^ sData = "Here is some data to encrypt."; // Encrypt the string to an in-memory buffer. array<Byte>^Data = EncryptTextToMemory( sData, tDESalg->Key, tDESalg->IV ); // Decrypt the buffer back to a string. String^ Final = DecryptTextFromMemory( Data, tDESalg->Key, tDESalg->IV ); // Display the decrypted string to the console. Console::WriteLine( Final ); } catch ( Exception^ e ) { Console::WriteLine( e->Message ); } }
Available since 1.1