Here is a class to Encrypt and Decrypt a given string using RijndaelManaged. You have to change the private variable value based on your strength requirement of the encryption.
Encryption:
- public static string Encrypt(string plainText)
- {
- byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
- byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
- byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
- PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);
- byte[] keyBytes = password.GetBytes(keySize / 8);
- RijndaelManaged symmetricKey = new RijndaelManaged();
- symmetricKey.Mode = CipherMode.CBC;
- ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);
- MemoryStream memoryStream = new MemoryStream();
- CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
- cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
- cryptoStream.FlushFinalBlock();
- byte[] cipherTextBytes = memoryStream.ToArray();
- memoryStream.Close();
- cryptoStream.Close();
- string cipherText = Convert.ToBase64String(cipherTextBytes);
- return cipherText;
- }
Decryption:
- public static string Decrypt(string cipherText)
- {
- byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
- byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
- byte[] cipherTextBytes = Convert.FromBase64String(cipherText);
- PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);
- byte[] keyBytes = password.GetBytes(keySize / 8);
- RijndaelManaged symmetricKey = new RijndaelManaged();
- symmetricKey.Mode = CipherMode.CBC;
- ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);
- MemoryStream memoryStream = new MemoryStream(cipherTextBytes);
- CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
- byte[] plainTextBytes = new byte[cipherTextBytes.Length];
- int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
- memoryStream.Close();
- cryptoStream.Close();
- string plainText = Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
- return plainText;
- }
These private variables also needs to be initialized within the same class.
- private const string passPhrase = "Pas5pr@se";
- private const string saltValue = "s@1tValue";
- private const string hashAlgorithm = "MD5";
- private const int passwordIterations = 2;
- private const string initVector = "@1B2c3D4e5F6g7H8";
- private const int keySize = 256;