Ben geri kullanıcıya geçirmek istediğiniz bir CryptoStream
varsa naif bir yaklaşım olurBir CryptoStream döndürülebilir ve hala her şeyin doğru şekilde elden çıkarılabilir mi?
public Stream GetDecryptedFileStream(string inputFile, byte[] key, byte[] iv)
{
var fsCrypt = new FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.Read);
var rmCrypto = new RijndaelManaged();
var transform = rmCrypto.CreateDecryptor(key, iv);
var cs = new CryptoStream(fsCrypt, transform, CryptoStreamMode.Read);
return cs;
}
ben CryptoStream
atarken FileStream
will also be disposed yatan biliyoruz. Çalıştığım sorun, rmCrypto
ve transform
ile ne yapmam? RijndaelManaged
ve ICryptoTransform
tek kullanımlık sınıflardır, ancak akımın atılması bu iki nesneyi bertaraf etmez.
Bu durumun üstesinden gelmenin doğru yolu nedir?
gibi kullanılmış, 'bunlar yöntemde lokal değişkenler gibi GetDecryptedFileStream'' dan döndükten sonra rmCrypto' ve 'transform' imha edilmelidir. –
@YuvalItzchakov Kapsam dışı bırakılması bertaraf edilmek anlamına gelmez. GC, 'cs' için son başvuruya kadar bu iki nesneyi sonlandırmayacaktır. –
Oh, 'CryptoStream''in bunları bir parametre olarak kabul ettiğini göremedim. –