问题描述
|
好的,伙计们,这是一个古老的问题了,您如何使用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,则系统会很好地处理它,只要输出文件出来就像读取这个,sample.xml.zip,但是winzip从来没有为打开它而bit之以鼻,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();
}
解决方法
您无法像使用Word文档那样通过密码保护XML文件。之所以可以在Word文档上放置密码,是因为Word和其他可能读取Word文档的程序都支持密码保护。没有什么可以阻止程序完全忽略密码(除非使用密码作为密钥生成器以某种方式加密了文件)。
XML文件只是文本文件。如果未将其放在受密码保护的容器(例如zip文件)中,则无法进行密码保护。压缩XML文件时,会将其放置在zip归档文件中,扩展名为.zip,以表明它是一个zip文件。
然后由接收zip文件的人提供正确的密码,以便解压缩zip文件并检索原始XML文件。
我不相信.NET对管理.zip文件有任何支持。您可以使用第三方库(例如DotNetZip)来帮助您。
, 然后这样做,文件就会丢失
它的扩展名
您的意思是,文件名从
MyXMLFile.xml
变为MyXMLFile.zip
?
您对此无能为力,绝对没有。
xml文件是纯文本文件,如果不进行某种方式的加密,则无法通过密码保护文件。加密后,它不再是Xml文件,而是加密文件,解密后将生成Xml文件。
将您的xml文件加密为受密码保护的Zip文件是解决此问题的完美方法。
最终用户解压缩该zip文件后,他们将其视为Xml文件,然后一切正常。
希望这可以帮助。
,加密文件然后解密它是一种选择。本文提供了有关加密和解密的一些信息。
,我认为一个不错的选择是将其压缩并用密码保护该压缩文件。不是xml。像dotnetzip这样的库可能适用于此,非常简单。