【问题标题】:Encrypting any file using AES使用 AES 加密任何文件
【发布时间】:2014-04-30 17:03:12
【问题描述】:

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

            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 或图像文件格式。我可以对代码进行哪些更改以将功能扩展到所有此类文件类型?

【问题讨论】:

  • 会不会是用文本模式打开文件?为了缩小问题范围,您应该测试在没有加密的情况下读取和写入文件是否有效。如果它没有抛出问题的加密部分,如果它确实尝试您是否可以找到无法正确解密的加密部分的输入,并在可能的情况下抛出 IO 内容。
  • 你试过bouncycastle吗?

标签: c# encryption aes


【解决方案1】:

您想使用 BinaryReader 和 BinaryWriter 来执行文件 I/O。普通的 StreamReader 将尝试使用特定编码读取字节,因为它实现了 TextReader 并将破坏原始数据类型。这就是为什么纯文本 .txt 和 .xml 有效,而 .docx 文件无效。

【讨论】:

  • 还添加代码更改,让您的答案更全面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 2014-01-18
  • 2016-03-30
相关资源
最近更新 更多