好的,所以我有这个代码用于解密文件
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
但它表示 Stream不支持搜索(类似于此) 我还尝试按
计算文件的字节数File.ReadAllBytes(encrypted_file_path).Length
但它说该文件正在使用中......由于FileStream fsCrypt
,它确实在使用同时我用一些大整数替换cs.Length
以使其工作..比如1000000 ..不会导致任何异常的最大整数..它确实有效。
答案 0 :(得分:4)
在解密整个文件之前,您无法知道长度。
因此,您需要从一个小数组开始,并在它变满时使其变大。
MemoryStream
类正是这样做的;您只需cs.CopyTo()
进入新的MemoryStream并调用ToArray()
。