How to implement Triple DES in C# (complete example) How to implement Triple DES in C# (complete example) asp.net asp.net

How to implement Triple DES in C# (complete example)


Complete source here: http://www.codeproject.com/Articles/14150/Encrypt-and-Decrypt-Data-with-C

Encrypt:

public static string Encrypt(string toEncrypt, bool useHashing){    byte[] keyArray;    byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);    System.Configuration.AppSettingsReader settingsReader =                                         new AppSettingsReader();    // Get the key from config file    string key = (string)settingsReader.GetValue("SecurityKey",                                                      typeof(String));    //System.Windows.Forms.MessageBox.Show(key);    //If hashing use get hashcode regards to your key    if (useHashing)    {        MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();        keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));        //Always release the resources and flush data        // of the Cryptographic service provide. Best Practice        hashmd5.Clear();    }    else        keyArray = UTF8Encoding.UTF8.GetBytes(key);    TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();    //set the secret key for the tripleDES algorithm    tdes.Key = keyArray;    //mode of operation. there are other 4 modes.    //We choose ECB(Electronic code Book)    tdes.Mode = CipherMode.ECB;    //padding mode(if any extra byte added)    tdes.Padding = PaddingMode.PKCS7;    ICryptoTransform cTransform = tdes.CreateEncryptor();    //transform the specified region of bytes array to resultArray    byte[] resultArray =       cTransform.TransformFinalBlock(toEncryptArray, 0,       toEncryptArray.Length);    //Release resources held by TripleDes Encryptor    tdes.Clear();    //Return the encrypted data into unreadable string format    return Convert.ToBase64String(resultArray, 0, resultArray.Length);}

Decrypt:

public static string Decrypt(string cipherString, bool useHashing){    byte[] keyArray;    //get the byte code of the string    byte[] toEncryptArray = Convert.FromBase64String(cipherString);    System.Configuration.AppSettingsReader settingsReader =                                         new AppSettingsReader();    //Get your key from config file to open the lock!    string key = (string)settingsReader.GetValue("SecurityKey",                                                  typeof(String));                if (useHashing)    {        //if hashing was used get the hash code with regards to your key        MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();        keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));        //release any resource held by the MD5CryptoServiceProvider        hashmd5.Clear();    }    else    {        //if hashing was not implemented get the byte code of the key        keyArray = UTF8Encoding.UTF8.GetBytes(key);    }    TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();    //set the secret key for the tripleDES algorithm    tdes.Key = keyArray;    //mode of operation. there are other 4 modes.     //We choose ECB(Electronic code Book)    tdes.Mode = CipherMode.ECB;    //padding mode(if any extra byte added)    tdes.Padding = PaddingMode.PKCS7;    ICryptoTransform cTransform = tdes.CreateDecryptor();    byte[] resultArray = cTransform.TransformFinalBlock(                         toDecryptArray, 0, toDecryptArray.Length);    //Release resources held by TripleDes Encryptor                    tdes.Clear();    //return the Clear decrypted TEXT    return UTF8Encoding.UTF8.GetString(resultArray);}


using System;using System.Configuration;using System.Security.Cryptography;using System.Text;public class TripleDESImp{    public static readonly string Key = ConfigurationManager.AppSettings["Encryption_Key"];    public static readonly Encoding Encoder = Encoding.UTF8;    public static string TripleDesEncrypt(string plainText)    {        var des = CreateDes(Key);        var ct = des.CreateEncryptor();        var input = Encoding.UTF8.GetBytes(plainText);        var output = ct.TransformFinalBlock(input, 0, input.Length);        return Convert.ToBase64String(output);    }    public static string TripleDesDecrypt(string cypherText)    {        var des = CreateDes(Key);        var ct = des.CreateDecryptor();        var input = Convert.FromBase64String(cypherText);        var output = ct.TransformFinalBlock(input, 0, input.Length);        return Encoding.UTF8.GetString(output);    }    public static TripleDES CreateDes(string key)    {        MD5 md5 = new MD5CryptoServiceProvider();        TripleDES des = new TripleDESCryptoServiceProvider();        var desKey= md5.ComputeHash(Encoding.UTF8.GetBytes(key));        des.Key = desKey;        des.IV = new byte[des.BlockSize / 8];        des.Padding=PaddingMode.PKCS7;        des.Mode=CipherMode.ECB;        return des;    }}<configuration><appsettings><add key="Encryption_Key" value="put_your_encryption_key_here"/></appsettings><configuration>


Why not use the .Net Cryptography Library ,it has DES and Triple DES implementations. I would suggest not to reinvent the wheel and use the library ,Well if you need to practice and sharpen your skills than its great to roll out your own implementation ! :)

private static void EncryptData(String inName, String outName, byte[] tdesKey, byte[] tdesIV){    //Create the file streams to handle the input and output files.FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);fout.SetLength(0);//Create variables to help with read and write.byte[] bin = new byte[100]; //This is intermediate storage for the encryption.long rdlen = 0;              //This is the total number of bytes written.long totlen = fin.Length;    //This is the total length of the input file.int len;                     //This is the number of bytes to be written at a time.TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();          CryptoStream encStream = new CryptoStream(fout, tdes.CreateEncryptor(tdesKey, tdesIV), CryptoStreamMode.Write);Console.WriteLine("Encrypting...");//Read from the input file, then encrypt and write to the output file.while(rdlen < totlen){    len = fin.Read(bin, 0, 100);    encStream.Write(bin, 0, len);    rdlen = rdlen + len;    Console.WriteLine("{0} bytes processed", rdlen);}encStream.Close();                     }


Source: MSDN