DotNetZip密码错误特殊字符

时间:2016-02-24 15:48:50

标签: c# dotnetzip

当我使用以下代码打开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");
 }

1 个答案:

答案 0 :(得分:1)

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

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

除非IZArc使用完全相同的回退行为,否则您将无法解密该文件。不幸的是IZArc似乎是闭源的,所以我无法验证它的用途。