Nếu tôi có một CryptoStream
mà tôi muốn vượt qua trở lại cho người sử dụng, cách tiếp cận ngây thơ sẽ làCryptoStream có thể được trả lại và vẫn có mọi thứ được xử lý đúng không?
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;
}
Tôi biết rằng khi tôi vứt bỏ các CryptoStream
nằm dưới FileStream
will also be disposed. Vấn đề tôi đang gặp phải là tôi phải làm gì với rmCrypto
và transform
? RijndaelManaged
và ICryptoTransform
là các lớp dùng một lần, nhưng việc xử lý luồng không loại bỏ hai đối tượng đó.
Cách chính xác để xử lý tình huống này là gì?
Theo phương pháp của bạn, 'rmCrypto' và 'transform' nên được xử lý sau khi bạn quay trở lại từ' GetDecryptedFileStream' vì chúng là các biến cục bộ trong phương pháp của bạn. –
@YuvalItzchakov Đi ra khỏi phạm vi không có nghĩa là bị xử lý. GC sẽ không hoàn thành hai đối tượng đó cho đến khi tham chiếu cuối cùng tới 'cs' được giải phóng. –
Ồ, tôi không nhìn thấy 'CryptoStream' của bạn đang chấp nhận chúng dưới dạng tham số. –