using System.Security.Cryptography;
private const string C_MD5 = "MD5";
private const string C_SHA = "SHA1";
private const string C_TDS = "TDES";
private const string C_AES = "AES";
private static int _passwordIterations = 1;
private static int _keySize = 128;
private static byte[] GetGeneratedIVector(string password, string salt)
var saltValueBytes = Encoding.ASCII.GetBytes(salt);
var iVectorGenerated = new Rfc2898DeriveBytes(password, saltValueBytes, _passwordIterations);
var iVectorGeneratedBytes = iVectorGenerated.GetBytes(_keySize / 8);
return iVectorGeneratedBytes;
public static string Encrypt(string plainTextData, string password, string salt)
var saltValueBytes = Encoding.ASCII.GetBytes(salt);
var plainTextBytes = Encoding.UTF8.GetBytes(plainTextData);
if (string.IsNullOrEmpty(plainTextData))
var derivedPassword = new Rfc2898DeriveBytes(password, saltValueBytes, _passwordIterations);
var keyBytes = derivedPassword.GetBytes(_keySize / 8);
var symmetricKey = new RijndaelManaged
using (var encryptor = symmetricKey.CreateEncryptor(keyBytes, GetGeneratedIVector(password, salt)))
using (var memStream = new MemoryStream())
using (var cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write))
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
cipherTextBytes = memStream.ToArray();
return Convert.ToBase64String(cipherTextBytes);
public static string Decrypt(string cipherText, string password, string salt)
var saltValueBytes = Encoding.ASCII.GetBytes(salt);
var cipherTextBytes = Convert.FromBase64String(cipherText);
if (string.IsNullOrEmpty(cipherText))
var derivedPassword = new Rfc2898DeriveBytes(password, saltValueBytes, _passwordIterations);
var keyBytes = derivedPassword.GetBytes(_keySize / 8);
var symmetricKey = new RijndaelManaged
var plainTextBytes = new byte[cipherTextBytes.Length];
using (var decryptor = symmetricKey.CreateDecryptor(keyBytes, GetGeneratedIVector(password, salt)))
using (var memStream = new MemoryStream(cipherTextBytes))
using (var cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read))
byteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
return Encoding.UTF8.GetString(plainTextBytes, 0, byteCount);
public static void Main()
var encripted = Encrypt("myTEST","12345678","9BC8244735F7D4861493215BEFDFA5AC");
Console.WriteLine("encripted = "+encripted);
var decripted = Decrypt(encripted,"12345678","9BC8244735F7D4861493215BEFDFA5AC");
Console.WriteLine("decripted = "+decripted);