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);
}
}
}