0

我有一个包含大量敏感数据的大型 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 模式完整并仅加密特定字段?

4

2 回答 2

2

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

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

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

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

于 2013-06-23T21:48:56.387 回答
2

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

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

于 2013-06-23T21:49:16.303 回答