在引发CryptographicException之后处理CryptoStream

时间:2016-12-19 20:53:58

标签: c# encryption stream resources aes

我目前正在研究一种用AES加密文件的小工具 要打开,读取,解密,最后写入和关闭数据,我使用的方法是FileBusiness:

public void FileBusiness(ICryptoTransform transform, string input, string output)
{
    FileStream inStream = new FileStream(input, FileMode.Open, FileAccess.Read);
    FileStream outStream = new FileStream(output, FileMode.Create, FileAccess.Write);
    using (CryptoStream cryptoStream = new CryptoStream(outStream, transform, CryptoStreamMode.Write))
    {
        int data;
        while ((data = inStream.ReadByte()) != -1)
        {
            cryptoStream.WriteByte((byte)data);
        }
        try
        {
            cryptoStream.FlushFinalBlock();
        }
        catch (CryptographicException)
        {
            //Exception handling goes here...
        }
        finally
        {
            inStream.Close();
            outStream.Close();
        }
    } // <---- Exception is thrown here, when using disposes the cryptoStream
}

就我说得对,几乎总是在用户输入错误的解密密钥时,FlushFinalBlock()会抛出CryptographicException。
因此,如果没有抛出异常,则由于使用了块,cryptoStream会自动处理 但是如果它在抛出异常后尝试处理,我会得到另一个CryptographicException(&#34;填充无效,无法删除&#34;)。我尝试拨打Dispose()Close()Clear(),但没有任何作用 我应该把它打开吗?我的意思是,只需删除使用块,然后在Close()之后立即致电FlushFinalBlock()

提前感谢您的帮助!

哦,除了用错误的密钥解密外,一切正常,但我肯定想以正确的方式处理错误的密钥......

0 个答案:

没有答案