Monday, 18 June 2012

Encryption/Decryption in C#.Net

Just declare a pass phrase in your code like a master key which allows the MD5CryptoServiceProvider class (in the System.Security and System.Security.Cryptography namespace) to compute a hash value for encryption/decryption. TripleDESCryptoServiceProvider class is used to encrypt/ decrypt strings which in turn uses 3DES (Triple Data Encryption Standard) algorithm. 3DES alogorithm uses three 64-bit long keys to (Encrypt-Decrypt-Encrypt) data.

Declare the pass phrase as below, and you can set any string value you like:
const string passphrase = "password";
 
Encryption Algorithm
public static string EncryptString(string Message, string Passphrase)
        {
            Passphrase = "BoTrade";
            byte[] Results;

            System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
            // Step 1. We hash the passphrase using MD5 

            MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();

            byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));

            // Step 2. Create a new TripleDESCryptoServiceProvider object 

            TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();

            // Step 3. Setup the encoder 

            TDESAlgorithm.Key = TDESKey;

            TDESAlgorithm.Mode = CipherMode.ECB;

            TDESAlgorithm.Padding = PaddingMode.PKCS7;

            // Step 4. Convert the input string to a byte[] 

            byte[] DataToEncrypt = UTF8.GetBytes(Message);


            // Step 5. Attempt to encrypt the string 

            try
            {

                ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();

                Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);

            }

            finally
            {

                // Clear the TripleDes and Hashprovider services of any sensitive information 

                TDESAlgorithm.Clear();

                HashProvider.Clear();

            }

            // Step 6. Return the encrypted string as a base64 encoded string 

            return Convert.ToBase64String(Results);

        }

Decryption Algorithm
public static string DecryptString(string Message, string Passphrase)
        {
            byte[] Results;

            Passphrase = "BoTrade";

            System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();

            // Step 1. We hash the passphrase using MD5 

            // We use the MD5 hash generator as the result is a 128 bit byte array 

            // which is a valid length for the TripleDES encoder we use below 

            MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();

            byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));

            // Step 2. Create a new TripleDESCryptoServiceProvider object 

            TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();

            // Step 3. Setup the decoder 

            TDESAlgorithm.Key = TDESKey;

            TDESAlgorithm.Mode = CipherMode.ECB;

            TDESAlgorithm.Padding = PaddingMode.PKCS7;

            // Step 4. Convert the input string to a byte[] 

            byte[] DataToDecrypt = Convert.FromBase64String(Message);

            // Step 5. Attempt to decrypt the string 

            try
            {

                ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();

                Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);

            }

            finally
            {

                // Clear the TripleDes and Hashprovider services of any sensitive information 

                TDESAlgorithm.Clear();

                HashProvider.Clear();

            }

            // Step 6. Return the decrypted string in UTF8 format 

            return UTF8.GetString(Results);

        }