对于这个古老的问题,所有人和女孩都是时候了,你如何使用C#密码保护xml文件? 我也在C#中创建了该文件(不像是相关的),现在我需要密码保护它,以便我可以通过电子邮件发送给客户,任何建议人员,
此外,我尝试使用C#将xml文件放入zip文件中,并且在执行此操作时文件将丢失其扩展名,并且它使用我找到的每个方法执行此操作,因此我真的只想密码保护原始文件。
我应该更清楚这一点,文件永久丢失它的扩展名,当最终用户解压缩它时,它不再是一个xml文件,它只是一个带有名字,没有关联或任何东西的文件
好了改变这一点,已经指出了很多,xml没有得到密码保护,因为它只是文本,而不是问题,所以让我们改变一下它的ziping怎么样
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,系统处理得很好,授予输出文件出来读取就像这个,sample.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();
}
答案 0 :(得分:3)
并且在执行此操作时文件丢失 这是扩展
您的意思是,文件名从MyXMLFile.xml
更改为MyXMLFile.zip
?
你无能为力,绝对没有。
xml文件是纯文本文件,如果不以某种方式对其进行加密,则无法密码保护文件。加密后,它不再是一个Xml文件,它是一个加密文件,解密时会生成一个Xml文件。
将您的xml文件加密到受密码保护的Zip文件中是解决此问题的完美解决方案。
一旦最终用户解压缩zip文件,他们就会将其视为Xml文件,然后一切都会好的。
希望这有帮助。
答案 1 :(得分:2)
您无法以Word文档的方式密码保护XML文件。您可以在Word文档上放置密码的原因是因为Word和其他可以读取Word文档的程序可能支持密码保护。什么都不能阻止程序完全忽略密码(除非使用密码作为密钥生成器以某种方式加密文件)。
XML文件只是文本文件。如果不将密码保存在受密码保护的容器(例如zip文件)中,则无法保护密码。当你压缩XML文件时,它被放在一个zip存档中,扩展名为.zip,表示它是一个zip文件。
然后由接收zip文件的人提供正确的密码才能解压缩zip文件并检索原始XML文件。
我不相信.NET支持管理.zip文件。您可以使用DotNetZip之类的第三方库来帮助您解决此问题。
答案 2 :(得分:1)
加密文件然后解密它将是一种选择。 This article提供有关加密和解密的一些信息。
答案 3 :(得分:1)
我认为一个很好的选择是压缩它和密码保护zip文件。不是xml。像dotnetzip这样的图书馆可以为此工作并且非常直接。