public string Encrypt <T>(string keyString, T value) { if (string.IsNullOrWhiteSpace(keyString)) { throw new ArgumentNullException(nameof(keyString)); } string plainText = HelperFunc.ChangeType <string>(value); if (string.IsNullOrWhiteSpace(plainText)) { throw new ArgumentNullException(nameof(value)); } // Create an Aes object with the specified key using Aes aesAlg = Aes.Create(); aesAlg.Key = Encoding.UTF8.GetBytes(keyString); // Create an encryptor to perform the stream transform. using ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); // Create the streams used for encryption. using MemoryStream msEncrypt = new MemoryStream(); using CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write); using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { //Write all data to the stream. swEncrypt.Write(plainText); } byte[] encryptedContent = msEncrypt.ToArray(); byte[] result = new byte[aesAlg.IV.Length + encryptedContent.Length]; Buffer.BlockCopy(aesAlg.IV, 0, result, 0, aesAlg.IV.Length); Buffer.BlockCopy(encryptedContent, 0, result, aesAlg.IV.Length, encryptedContent.Length); return(Convert.ToBase64String(result)); }
public T Decrypt <T>(string keyString, string cipherText) { if (string.IsNullOrWhiteSpace(keyString)) { throw new ArgumentNullException(nameof(keyString)); } if (string.IsNullOrWhiteSpace(cipherText)) { throw new ArgumentNullException(nameof(cipherText)); } byte[] fullCipher = Convert.FromBase64String(cipherText); var iv = new byte[16]; var cipher = new byte[fullCipher.Length - iv.Length]; Buffer.BlockCopy(fullCipher, 0, iv, 0, iv.Length); Buffer.BlockCopy(fullCipher, iv.Length, cipher, 0, fullCipher.Length - iv.Length); var key = Encoding.UTF8.GetBytes(keyString); // Create an Aes object with the specified key using Aes aesAlg = Aes.Create(); aesAlg.Key = Encoding.UTF8.GetBytes(keyString); // Create a decryptor to perform the stream transform. using ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, iv); string plainText; // Create the streams used for decryption. using (MemoryStream msDecrypt = new MemoryStream(cipher)) { using CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read); // Read the decrypted bytes from the decrypting stream // and place them in a string. using StreamReader srDecrypt = new StreamReader(csDecrypt); plainText = srDecrypt.ReadToEnd(); } //Return Plain Text return(HelperFunc.ChangeType <T>(plainText)); }