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

C# 使用Rijndael加密文档多个部分的效率,c#,performance,security,encryption,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; ICry

我有一个包含大量敏感数据的大型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模式不变,只加密特定字段,效率更高?

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

<> P>您应该考虑做其他事情的唯一原因是,如果您有一个要求,即文档的结构需要在代码上可见和可操作而不进行解密,即操作该对象的代码不能访问加密密钥。 加密整个文档在密钥管理、文件处理逻辑方面也将更加高效。另外,在许多使用IV或块大小填充的加密模式下,加密整个文件将更节省空间


不过,您主要关心的是安全需求,而不是性能。

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

<> P>您应该考虑做其他事情的唯一原因是,如果您有一个要求,即文档的结构需要在代码上可见和可操作而不进行解密,即操作该对象的代码不能访问加密密钥。 加密整个文档在密钥管理、文件处理逻辑方面也将更加高效。另外,在许多使用IV或块大小填充的加密模式下,加密整个文件将更节省空间


不过,您主要关心的是安全需求,而不是性能。

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


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

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


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

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