0

我的目标是混淆 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 文件。

编辑:这只发生在我删除我的一个参数并保存配置时。就好像序列化程序在最后写了一些东西以保持文件大小相同。

4

3 回答 3

1

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

于 2012-10-23T13:59:35.673 回答
1

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

于 2012-10-23T16:58:49.723 回答
0

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

于 2012-10-23T19:04:05.610 回答