Share via


Symmetric Algorithms Sample

This sample uses the Rijndael and TripleDESCryptoServiceProvider classes to implement a symmetric (secret-key) encryption, as described in the Cryptography Overview.

To get samples and instructions for installing them

  • Do one or more of the following:

    • On the Help menu, click Samples.

      The Readme displays information about samples.

    • Visit the Visual Studio 2008 Samples Web site. The most recent versions of samples are available there.

    • Locate samples on the computer on which Visual Studio is installed. By default, samples and a Readme file are installed in drive:\Program Files\Microsoft Visual Studio 9.0\Samples\lcid. For Express editions of Visual Studio, all samples are located online.

For more information, see Visual Studio Samples.

Security noteSecurity Note:

This sample code is intended to illustrate a concept, and it shows only the code that is relevant to that concept. It may not meet the security requirements for a specific environment, and it should not be used exactly as shown. We recommend that you add security and error-handling code to make your projects more secure and robust. Microsoft provides this sample code "AS IS" with no warranties.

To run this sample

  • Press F5.

Demonstrates

The SampleCrypto class encapsulates the encryption algorithm, the salt and initialization vector (IV), and encryption and decryption routines that define one encrypted file. The constructor takes one parameter that determines the encryption type, Rijndael or TripleDES. The corresponding field in the class, crpSym, is of the abstract type SymmetricAlgorithm. It is set to an instance of the Rijndael class or TripleDESCryptoServiceProvider class. The CreateSaltIVFile method saves the salt and IV values to a .dat file. The Decrypt and Encrypt methods process the source file that is specified in the SourceFileName property.

One instance of the SampleCrypto class is created when the form loads. The controls on the form demonstrate the methods and properties of the SampleCrypto class. When the Encrypt with Password control is checked, then the key is not generated and set automatically but is rather derived from a password that has been "salted". Moreover, the salt and initialization vector (IV) are persisted unencrypted to a .dat file. In this way you can see how you would securely send a document to someone: The encrypted document could be sent over an insecure wire, and the .dat file and password could be transferred securely using asymmetric (or public key) encryption. This type of encryption is the most secure form of encryption, but it takes much longer to process. This is why it is typically used for small items like a secret key, salt/IV file, or password.

See Also

Concepts

.NET Framework Cryptography Model

Reference

TripleDESCryptoServiceProvider

Rijndael

SymmetricAlgorithm

Salt

IV