public static byte[] Encrypt(string text, string password, byte[] salt = null) { if (string.IsNullOrEmpty(text)) { throw new ArgumentNullException("text"); } if (string.IsNullOrEmpty(password)) { throw new ArgumentNullException("password"); } if (salt == null) { salt = DefaultSalt; } var aes = new AesManaged(); byte[] encryptedData; try { aes.SetKey(password, salt); var encryptor = aes.CreateEncryptor(aes.Key, aes.IV); using (var ms = new MemoryStream()) { ms.Write(BitConverter.GetBytes(aes.IV.Length), 0, sizeof(int)); ms.Write(aes.IV, 0, aes.IV.Length); using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) using (var sw = new StreamWriter(cs)) sw.Write(text); encryptedData = ms.ToArray(); } } finally { aes.Clear(); } return(encryptedData); }
public static string Decrypt(byte[] encryptedData, string password, byte[] salt = null) { if (encryptedData == null) { throw new ArgumentNullException("encryptedData"); } if (string.IsNullOrEmpty(password)) { throw new ArgumentNullException("password"); } if (salt == null) { salt = DefaultSalt; } var aes = new AesManaged(); string text; try { aes.SetKey(password, salt); using (var ms = new MemoryStream(encryptedData)) { aes.IV = ms.GetIV(); var decryptor = aes.CreateDecryptor(aes.Key, aes.IV); using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) using (var sr = new StreamReader(cs)) text = sr.ReadToEnd(); } } finally { aes.Clear(); } return(text); }