【问题标题】:Efficiency of encrypting multiple parts of a document with Rijndael使用 Rijndael 加密文档的多个部分的效率
【发布时间】:2025-11-24 17:55:01
【问题描述】:

我有一个包含大量敏感数据的大型 xml 文档。我有一个用 Rijndael 加密这些数据的算法。

byte[] encrypted;
using (RijndaelManaged rijAlg = new RijndaelManaged())
{
  rijAlg.Key = EncyptionManager.RijndaelKey;
  rijAlg.IV = EncyptionManager.RijndaelIV;
  rijAlg.Padding = PaddingMode.PKCS7;

  ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
  using (MemoryStream msEncrypt = new MemoryStream())
  {
    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
     {
        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
        {
          swEncrypt.Write(plainText);
        }
        encrypted = msEncrypt.ToArray();
     }
  }
}
return encrypted;

假设绝大多数文件需要加密存储,是创建 xml 文档并对文件的全部内容进行加密,还是保留 xml 架构并仅加密特定字段更有效?

【问题讨论】:

  • 您是在问加密一个块是否比加密多个块效率更高或更低?
  • @PeterRitchie,是的-假设较小块的总数小于单个块的长度。换句话说,最大的消耗是加密的大小还是数量?

标签: c# performance security encryption


【解决方案1】:

加密整个文件(整个 XML 字节流)当然要安全得多。如果您只对 XML 文档的特定节点进行编码,那么任何愿意查看的人仍然可以清楚地看到文档的整个结构,包括存在多少种元素。

您应该考虑做其他任何事情的唯一原因是,如果您要求文档的结构需要在不解密的情况下由您的代码可见和可操作,即操作对象的代码无权访问加密键。

加密整个文档在密钥管理、文件处理逻辑方面也将更加高效。此外,在许多使用 IV 或填充到块大小的加密模式下,加密整个文件会更节省空间。

不过,您的主要关注点应该是您的安全要求,而不是性能。

【讨论】:

    【解决方案2】:

    不可能有静态答案。最佳点取决于块的确切数量和大小,因为该算法具有固定的设置成本。加密两个区块的成本不到加密一个区块的两倍。

    唯一有效的答案是进行基准测试以找到分界点。

    【讨论】: