Se ho un CryptoStream
che voglio passare di nuovo per l'utente, l'approccio ingenuo sarebbeÈ possibile restituire un CryptoStream e disporre ancora di tutto correttamente?
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;
}
So che quando mi dispongo il CryptoStream
sottostante FileStream
will also be disposed. Il problema che sto eseguendo è cosa devo fare con rmCrypto
e transform
? RijndaelManaged
e ICryptoTransform
sono classi usa e getta, ma lo smaltimento del flusso non dispone di questi due oggetti.
Qual è il modo corretto di gestire questa situazione?
Secondo il metodo, '' rmCrypto' e transform' devono essere smaltiti dopo il ritorno da 'GetDecryptedFileStream' in quanto sono variabili locali nel metodo. –
@YuvalItzchakov Uscire dall'ambito non significa essere smaltiti. Il GC non finalizzerà questi due oggetti finché non verrà rilasciato l'ultimo riferimento a 'cs'. –
Oh, non sono riuscito a vedere il tuo 'CryptoStream' li accetta come parametro. –