使用Rijndael加密文档的多个部分的效率

时间:2013-06-23 21:08:26

标签: c# performance security encryption

我有一个包含大量敏感数据的大型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架构完整并只加密特定字段会更有效吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:2)

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

唯一有效的答案是通过基准来找到截止点。