public Stream Decode(string key, Stream dataStream) { SymmetricAlgorithm provider = null; ICryptoTransform decryptor = null; Stream stream = null; try { provider = GetCryptoProvider(null); decryptor = provider.CreateDecryptor(); stream = new CryptoStream(dataStream, decryptor, CryptoStreamMode.Read); return stream.ReadSalt(key).DisposeTogetherWith(provider, decryptor); } catch { try { if (provider != null) provider.Dispose(); } catch { } try { if (decryptor != null) decryptor.Dispose(); } catch { } try { if (stream != null) stream.Dispose(); } catch { } throw; } }