Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DotNetZip密码错误特殊字符_C#_Dotnetzip - Fatal编程技术网

C# DotNetZip密码错误特殊字符

C# DotNetZip密码错误特殊字符,c#,dotnetzip,C#,Dotnetzip,当我用下面的代码(指定密码)打开zip文件时,我可以将文件放在里面 如果我使用IZArc打开归档文件并在那里设置密码,它会告诉我密码无效 这个问题的原因是什么 using (var zip = new ZipFile()) { zip.Password = "ïÁ×éÖËØ"; zip.Encryption = EncryptionAlgorithm.PkzipWeak; var fullTaxFormFilePath =

当我用下面的代码(指定密码)打开zip文件时,我可以将文件放在里面

如果我使用IZArc打开归档文件并在那里设置密码,它会告诉我密码无效

这个问题的原因是什么

using (var zip = new ZipFile())
{
            zip.Password = "ïÁ×éÖËØ";
            zip.Encryption = EncryptionAlgorithm.PkzipWeak;

            var fullTaxFormFilePath = @"C:\DETALHE.txt";
            zip.AddFile(fullTaxFormFilePath, "");

            zip.Save(@"C:\DETALHEZIP.zip");
 }

问题是内部DotNetZip在转换密码时使用代码页而不是unicode(在源代码中查找StringToByteArray)。代码页最初是IBM PC中的代码页,所以这可能就是PkZip选择它的原因。由于DotNetZip使用此代码页,这意味着由于回退,其中一些字符以奇怪的方式映射。例如,您的密码映射到以下内容(忽略?),这只是因为这些不是真正的字符):

ï-0x8b-?,Á-0x41-A,×-0x78-x,ï-0x82-?,ï-0x99-?,Ë-0x45-E,Ø-0x4f-O


除非IZArc使用完全相同的回退行为,否则您将无法解密该文件。不幸的是,IZArc似乎是封闭源代码,因此我无法验证它使用了什么。

首先猜测WinRar的输入文本框不支持这些字符。您如何使用WinRar?从命令行还是从GUI?您确定WinRar在密码中支持Unicode字符吗?这些不是特殊的字符,只是Unicode你的代码示例工作吗?是的,但我无法在其他程序员中打开此文件,因为此密码尝试使用更简单的密码“aaaaa”,看看问题是否出在字符上。你知道我可以用其他方法来做吗?我想说,可能不会在不同的zip解码器之间以可重复的方式进行。查看第6.0节中的规范(),它甚至没有说明更新密钥使用什么文本编码。您可以修改DotNetZip以不使用437代码页,只直接映射字符,但不能保证像IZArc这样的应用程序会这样做。