1

好吧,伙计们,现在是老问题的时候了,你如何使用 C# 对 xml 文件进行密码保护?我也已经在 C# 中创建了该文件(好像不是相关的),现在我需要对其进行密码保护,以便我可以将其通过电子邮件发送给客户,任何建议的家伙,

此外,我尝试使用 C# 将 xml 文件放入 zip 文件中,这样做后文件会丢失其扩展名,并且它会使用我找到的每种方法来执行此操作,所以我真的只想用密码保护原始文件。


我应该更清楚一点,文件永久丢失它的扩展名,当最终用户解压缩它时,它不再是一个 xml 文件,它只是一个有名称的文件,没有关联或任何东西

好的,稍微改变一下,很多人指出 xml 没有密码保护,因为它只是文本,不是问题,所以让我们改变一下它的压缩方式

    FileStream sourceFile = File.OpenRead(@"C:\sample.xml");
    FileStream destFile = File.Create(@"C:\sample.zip");

    GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress);

    try
    {
        int theByte = sourceFile.ReadByte();
        while (theByte != -1)
        {
            compStream.WriteByte((byte)theByte);
            theByte = sourceFile.ReadByte();
        }
    }
    finally
    {
        compStream.Dispose();
    } 

上面的代码会压缩文件,但是当最终用户解压缩文件时,文件会丢失它的 xml 扩展名以及文件关联

好的,我有一个更新我想出了如何防止文件丢失它的扩展名,如果我将输出文件名更改为 sample.xml.zip,系统会很好地处理它,允许输出文件像这样读取,示例.xml.zip,但是 winzip 从来不喜欢打开它,7zip 也没有,所以我对此非常满意,现在密码保护的东西是我还没有弄清楚的东西。

仅供参考,我的新代码。

    FileStream sourceFile = File.OpenRead(@"C:\sample.xml");
    FileStream destFile = File.Create(@"C:\sample.xml.zip");

    GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress);

    try
    {
        int theByte = sourceFile.ReadByte();
        while (theByte != -1)
        {
            compStream.WriteByte((byte)theByte);
            theByte = sourceFile.ReadByte();
        }
    }
    finally
    {
        compStream.Dispose();
    } 
4

4 回答 4

3

并且在执行此操作后,文件会丢失它的扩展名

你是什​​么意思,文件名从MyXMLFile.xml变为MyXMLFile.zip
你对此无能为力,绝对没有。

xml 文件是纯文本文件,如果不对其进行加密,您将无法对文件进行密码保护。一旦你加密它,它就不再是一个 Xml 文件,它是一个加密文件,解密后会产生一个 Xml 文件。

将您的 xml 文件加密为受密码保护的 Zip 文件是解决此问题的完美解决方案。

最终用户解压缩 zip 文件后,他们会将其视为 Xml 文件,然后一切都会好起来的。

希望这可以帮助。

于 2011-05-25T14:45:55.993 回答
2

您无法像使用 Word 文档那样对 XML 文件进行密码保护。您可以在 Word 文档上设置密码的原因是因为 Word 和可能其他可以读取 Word 文档的程序支持密码保护。没有什么可以阻止程序完全忽略密码(除非文件以某种方式使用密码作为密钥生成器进行了加密)。

XML 文件只是文本文件。如果不将它们放在受密码保护的容器(例如 zip 文件)中,就不可能进行密码保护。当您压缩 XML 文件时,它会放在一个 zip 存档中,扩展名为 .zip 以表明它是一个 zip 文件。

然后由接收 zip 文件的人提供正确的密码,以便解压缩 zip 文件并检索原始 XML 文件。

我不相信 .NET 对管理 .zip 文件有任何支持。你可以使用像DotNetZip这样的第三方库来帮助你。

于 2011-05-25T14:49:36.517 回答
1

加密文件然后解密将是一种选择。本文提供了一些有关加密和解密的信息。

于 2011-05-25T14:48:48.230 回答
1

我认为一个不错的选择是压缩它并用密码保护 zip 文件。不是xml。像 dotnetzip 这样的库可以解决这个问题,而且非常简单。

于 2011-05-25T14:50:03.100 回答