Encrypt and Decrypt a string using dual encryption method.
using System; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; namespace Pass { public class EncryptDecrypt { /// <summary> /// Encrypt a string using dual encryption method. Return a encrypted cipher Text /// </summary> /// <param name="toEncrypt"></param> /// <param name="key"></param> /// <returns></returns> public static string Encrypt(string toEncrypt, string key) { byte[] keyArray; byte[] toEncryptArray = Encoding.UTF8.GetBytes(toEncrypt); MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key)); hashmd5.Clear(); TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider { Key = keyArray, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; ICryptoTransform cTransform = tdes.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); tdes.Clear(); string resultbase64String = Convert.ToBase64String(resultArray, 0, resultArray.Length); string resultEncodedString = UrlHelper.Encode(resultbase64String); return resultEncodedString; } public static string Decrypt(string cipherString, string key) { try { byte[] keyArray; string cipherDecodedString = UrlHelper.Decode(cipherString); byte[] toEncryptArray = Convert.FromBase64String((cipherDecodedString.Replace(' ', '+'))); MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes(key)); hashmd5.Clear(); TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider { Key = keyArray, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; ICryptoTransform cTransform = tdes.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); tdes.Clear(); return Encoding.UTF8.GetString(resultArray); } catch (Exception ex) { return ""; } } } public class UrlHelper { public static string Encode(string str) { var charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()")); return Regex.Replace(str, string.Format("[^{0}]", charClass), new MatchEvaluator(EncodeEvaluator)); } public static string EncodeEvaluator(Match match) { return (match.Value == " ") ? "+" : string.Format("%{0:X2}", Convert.ToInt32(match.Value[0])); } public static string DecodeEvaluator(Match match) { return Convert.ToChar(int.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber)).ToString(); } public static string Decode(string str) { return Regex.Replace(str.Replace('+', ' '), "%[0-9a-zA-Z][0-9a-zA-Z]", new MatchEvaluator(DecodeEvaluator)); } } }
Usage
namespace Pass
{
class Program
{
static void Main(string[] args)
{
string passkey = "123";
string pwd = "Ridhvi";
string encryptedPass = EncryptDecrypt.Encrypt(pwd, passkey);
string decryptedPass = EncryptDecrypt.Decrypt(encryptedPass, passkey);
}
}
}