C# 这段代码有没有其他方法可以知道字节数?
好的,我有这个解密文件的代码C# 这段代码有没有其他方法可以知道字节数?,c#,encryption,rijndaelmanaged,cryptostream,C#,Encryption,Rijndaelmanaged,Cryptostream,好的,我有这个解密文件的代码 public static byte[] DecryptFile(string inputFile, string skey) { RijndaelManaged aes = new RijndaelManaged(); byte[] key = ASCIIEncoding.UTF8.GetBytes(skey); using (FileStream fsCrypt = new Fi
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()
在解密整个文件之前,您无法知道长度
因此,您需要从一个小数组开始,并在数组满时将其变大
MemoryStream
类就是这样做的;您可以将cs.CopyTo()
放入一个新的MemoryStream并调用ToArray()
等等,我想您可以为该文件创建一个FileInfo对象并使用它的length属性。虽然这可能只是磁盘上的大小。老实说,如果必须是数组形式,我只会制作一个字节列表,并在末尾调用ToArray()。@BenjaminDangerJohnson:不,是密文长度≠ 明文长度。如果我这样做,流“cs”的位置将结束,结果str为null..并且不允许在加密流cs中搜索。。编辑:所以我没有使用BinaryReader..而是将byte[]str设置为MemoryStream()。ToArray..谢谢!等等,我想你可以为这个文件创建一个FileInfo对象,并使用它的length属性。虽然这可能只是磁盘上的大小。老实说,如果必须是数组形式,我只会制作一个字节列表,并在末尾调用ToArray()。@BenjaminDangerJohnson:不,是密文长度≠ 明文长度。如果我这样做,流“cs”的位置将结束,结果str为null..并且不允许在加密流cs中搜索。。编辑:所以我没有使用BinaryReader..而是将byte[]str设置为MemoryStream()。ToArray..谢谢!