我的目标是混淆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文件。
编辑: 仅当我删除其中一个参数并保存配置时才会发生这种情况。好像序列化器在末尾写了一些东西来保持文件的大小相同。
答案 0 :(得分:1)
为什么不使用EncryptedXml而让框架担心加密/解密。
答案 1 :(得分:1)
在打开文件进行写入之前清空文件。查看Microsoft documentation的备注部分。
答案 2 :(得分:0)
使用不同的方法解决问题,如此处所建议的,使用DeflateStream而不是CryptoStream: c# encrypt xml file