我目前正在研究一种用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()
?
提前感谢您的帮助!
哦,除了用错误的密钥解密外,一切正常,但我肯定想以正确的方式处理错误的密钥......