C# 使用AES加密任何文件

C# 使用AES加密任何文件,c#,encryption,aes,C#,Encryption,Aes,我正在使用一些类似这样的代码来加密文件 FileStream fsInput = new FileStream(ifile_path, FileMode.Open, FileAccess.Read); FileStream fsEncrypted = new FileStream(ofile_path, FileMode.Create,

我正在使用一些类似这样的代码来加密文件

            FileStream fsInput = new FileStream(ifile_path,
              FileMode.Open,
              FileAccess.Read);

            FileStream fsEncrypted = new FileStream(ofile_path,
               FileMode.Create,
               FileAccess.Write);
            AesCryptoServiceProvider AES = new AesCryptoServiceProvider();
            AES.Mode = CipherMode.CBC;
            AES.KeySize = 256;
            iv = AES.IV;
            AES.Key = key;
            ICryptoTransform aesencrypt = AES.CreateEncryptor();
            CryptoStream cryptostream = new CryptoStream(fsEncrypted,
               aesencrypt,
               CryptoStreamMode.Write);

            byte[] bytearrayinput = new byte[fsInput.Length];
            fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
            cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
            cryptostream.Close();
            fsInput.Close();
            fsEncrypted.Close();

但是,尽管此代码成功地加密了.txt和.xml文件,但它不适用于其他文件类型,如.docx或图像文件格式。我可以对代码进行哪些更改以将功能扩展到所有此类文件类型?

您希望使用BinaryReader和BinaryWriter来执行文件I/O。普通StreamReader将尝试使用特定编码读取字节,因为它实现了TextReader,并会损坏基本数据类型。这就是纯文本.txt和.xml工作而.docx文件不工作的原因。

您希望使用BinaryReader和BinaryWriter进行文件I/O。普通StreamReader将尝试使用特定编码读取字节,因为它实现了TextReader,并将破坏基本数据类型。这就是为什么纯文本.txt和.xml可以工作,而.docx文件不能工作的原因。

是否可以在文本模式下打开文件?要缩小问题范围,您应该测试在没有加密的情况下读取和写入文件是否有效。如果它没有抛出问题的加密部分,如果它确实尝试是否可以找到加密部分未正确解密的输入,如果可能,则抛出IO内容。您是否尝试过bouncycastle。是否以文本模式打开文件?要缩小问题范围,您应该测试在没有加密的情况下读取和写入文件是否有效。如果它不排除问题的加密部分,如果它确实尝试您是否可以找到加密部分的输入,但该部分没有正确解密,如果可能,请扔掉IO内容。您是否尝试过bouncycastle。还可以添加代码更改以使您的答案更全面也可以添加代码更改以使您的答案更全面
            FileStream fsInput = new FileStream(ifile_path,
              FileMode.Open,
              FileAccess.Read);

            FileStream fsEncrypted = new FileStream(ofile_path,
               FileMode.Create,
               FileAccess.Write);
            AesCryptoServiceProvider AES = new AesCryptoServiceProvider();
            AES.Mode = CipherMode.CBC;
            AES.KeySize = 256;
            iv = AES.IV;
            AES.Key = key;
            ICryptoTransform aesencrypt = AES.CreateEncryptor();
            CryptoStream cryptostream = new CryptoStream(fsEncrypted,
               aesencrypt,
               CryptoStreamMode.Write);

            byte[] bytearrayinput = new byte[fsInput.Length];
            fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
            cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
            cryptostream.Close();
            fsInput.Close();
            fsEncrypted.Close();