好的,所以我有这个代码来解密文件
public static byte[] DecryptFile(string inputFile, string skey)
{
RijndaelManaged aes = new RijndaelManaged();
byte[] key = ASCIIEncoding.UTF8.GetBytes(skey);
using (FileStream fsCrypt = new FileStream(inputFile, FileMode.Open))
{
using (CryptoStream cs =
new CryptoStream(fsCrypt, aes.CreateDecryptor(key, key),
CryptoStreamMode.Read))
{
using (BinaryReader reader = new BinaryReader(cs))
{
byte[] str = reader.ReadBytes(Convert.ToInt32(cs.Length));
reader.Close();
cs.Close();
return (str);
}
}
}
}
}
现在我遇到了问题,我无法确定字节长度!我试过了
cs.Length
但它说流不支持搜索(类似于 tht)我还尝试通过计算文件的字节
数File.ReadAllBytes(encrypted_file_path).Length
但它说该文件正在使用中...它确实在使用中,因为FileStream fsCrypt
与此同时,我用一些大整数替换了cs.Length
以使其工作。像 1000000..不会导致任何异常的最大整数..它确实以这种方式工作。
在解密整个文件之前,您无法知道长度。
因此,您需要从一个小数组开始,并在它变满时使其变大。
MemoryStream
类就是这样做的;你可以cs.CopyTo()
一个新的MemoryStream并调用ToArray()
。