/// <summary> /// Decrypt string with Rijndael. /// </summary> /// <param name="cipherText"></param> /// <param name="passPhrase"></param> /// <param name="keysize"></param> /// <returns></returns> public static string DecryptStringManual(string cipherText, string passPhrase, int keysize) { using (PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, Encoding.UTF8.GetBytes(ClassUtils.FromHex(passPhrase.Substring(0, 8))))) { byte[] keyBytes = password.GetBytes(keysize / 8); using (var symmetricKey = new AesCryptoServiceProvider() { Mode = CipherMode.CFB }) { byte[] initVectorBytes = password.GetBytes(16); symmetricKey.BlockSize = 128; symmetricKey.KeySize = keysize; symmetricKey.Padding = PaddingMode.PKCS7; symmetricKey.Key = keyBytes; using (ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes)) { byte[] cipherTextBytes = Convert.FromBase64String(cipherText); using (MemoryStream memoryStream = new MemoryStream(cipherTextBytes)) { using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) { byte[] plainTextBytes = new byte[cipherTextBytes.Length]; int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); return(Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount)); } } } } } }
/// <summary> /// Encrypt string from Rijndael. /// </summary> /// <param name="plainText"></param> /// <param name="passPhrase"></param> /// <param name="keysize"></param> /// <returns></returns> public static string EncryptStringManual(string plainText, string passPhrase, int keysize) { using (PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, Encoding.UTF8.GetBytes(ClassUtils.FromHex(passPhrase.Substring(0, 8))))) { byte[] keyBytes = password.GetBytes(keysize / 8); using (var symmetricKey = new AesCryptoServiceProvider() { Mode = CipherMode.CFB }) { byte[] initVectorBytes = password.GetBytes(16); symmetricKey.BlockSize = 128; symmetricKey.KeySize = keysize; symmetricKey.Padding = PaddingMode.PKCS7; symmetricKey.Key = keyBytes; using (ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes)) { using (MemoryStream memoryStream = new MemoryStream()) { using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) { byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText); cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); cryptoStream.FlushFinalBlock(); byte[] cipherTextBytes = memoryStream.ToArray(); return(Convert.ToBase64String(cipherTextBytes)); } } } } } }