【问题标题】:Encrypting a file appends the last加密文件会附加最后一个
【发布时间】:2012-10-23 13:55:06
【问题描述】:

我的目标是混淆 XML 配置文件,以便用户无法编辑它。我使用以下代码:

        XmlSerializer xs = new XmlSerializer(typeof(this));

        SymmetricAlgorithm symmetricAlgorithm = DES.Create();
        symmetricAlgorithm.Key = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 };
        symmetricAlgorithm.Mode = CipherMode.ECB;

        using (FileStream fs = File.OpenWrite(filename))
        {
            using (CryptoStream cryptoStream = new CryptoStream(fs, symmetricAlgorithm.CreateEncryptor(), CryptoStreamMode.Write))
            {
                xs.Serialize(cryptoStream, this);
            }
        }

大多数时候它工作正常。但是偶尔,在写入文件时,它会在文件末尾添加最后几行(最新情况下为 211 个字节)。解密仍然可以正常工作,但不会再反序列化为 XML 文件。

编辑: 仅当我删除其中一个参数并保存配置时才会发生这种情况。就好像序列化器在最后写了一些东西来保持文件的大小一样。

【问题讨论】:

  • 为什么又要序列化Stream?也许你可以将它直接写入磁盘。

标签: c# .net xml encryption


【解决方案1】:

为什么不改用EncryptedXml,让框架担心加密/解密。

【讨论】:

  • 我喜欢它,不幸的是我使用的是 .NET 4.0。
  • @Serge ExcryptedXml 在 .NET 2.0 以上版本中可用。
【解决方案2】:

在打开文件进行写入之前清空文件。查看Microsoft documentation的备注部分。

【讨论】:

    【解决方案3】:

    使用不同的方法解决了这个问题,正如这里所建议的,使用 DeflateStream 而不是 CryptoStream: c# encrypt xml file

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 2011-04-09
      • 2016-07-20
      • 2012-01-05
      • 2017-10-18
      • 2010-12-11
      相关资源
      最近更新 更多