public static byte[] Decrypt(this byte[] Data, DeriveBytes Key, SymmetricAlgorithm AlgorithmUsing = null, string InitialVector = "OFRna73m*aze01xY", int KeySize = 256) { Contract.Requires <ArgumentNullException>(!string.IsNullOrEmpty(InitialVector), "InitialVector"); if (Data == null) { return(null); } AlgorithmUsing = AlgorithmUsing.Check(() => new RijndaelManaged()); using (DeriveBytes DerivedPassword = Key) { using (SymmetricAlgorithm SymmetricKey = AlgorithmUsing) { SymmetricKey.Mode = CipherMode.CBC; byte[] PlainTextBytes = null; using (ICryptoTransform Decryptor = SymmetricKey.CreateDecryptor(DerivedPassword.GetBytes(KeySize / 8), InitialVector.ToByteArray())) { using (MemoryStream MemStream = new MemoryStream(Data)) { using (CryptoStream CryptoStream = new CryptoStream(MemStream, Decryptor, CryptoStreamMode.Read)) { PlainTextBytes = CryptoStream.ReadAllBinary(); } } } SymmetricKey.Clear(); return(PlainTextBytes); } } }