首页 > 解决方案 > 在返回流函数中处理不同的流

问题描述

我有返回 CryptoStream 的函数:

public static CryptoStream CreateStream(string inputfile, string password)
    {
        byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
        byte[] salt = new byte[32];

        FileStream fsCrypt = new FileStream(inputfile, FileMode.Open);
        fsCrypt.Read(salt, 0, salt.Length);

        RijndaelManaged AES = new RijndaelManaged();
        AES.KeySize = 256;
        AES.BlockSize = 128;
        var key = new Rfc2898DeriveBytes(passwordBytes, salt, 50000);
        AES.Key = key.GetBytes(AES.KeySize / 8);
        AES.IV = key.GetBytes(AES.BlockSize / 8);
        AES.Padding = PaddingMode.PKCS7;
        AES.Mode = CipherMode.CFB;

        return new CryptoStream(fsCrypt, AES.CreateDecryptor(), CryptoStreamMode.Read);
    }

我这样称呼它:

CryptoStream cs = FileCryptoDecryptor.CreateStream("file.xml.aes", AppPass);

在 CreateStream 函数中,我正在创建文件流,我的问题是当我调用它时cs.Dipose();它是否也处理文件流?

标签: c#wpfcryptography

解决方案


的构造函数有第 4 个可选参数,CryptoStream目前默认情况下正在处理它。您可以将true其作为额外参数传递以使其保持打开状态。

请参阅此处:https ://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.cryptostream.-ctor?view=netframework-4.8#System_Security_Cryptography_CryptoStream__ctor_System_IO_Stream_System_Security_Cryptography_ICryptoTransform_System_Security_CryptoStreamMode_System_Boolean_


推荐阅读