DotNetZip 密码错误特殊字符

DotNetZip password error special characters

当我用下面的代码(指定密码)打开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 在内部使用 IBM437 code page and not unicode when converting the password (look for StringToByteArray in the source here)。代码页最初是 IBM PC 中的代码页,因此可能这就是 PkZip 选择它的原因。由于 DotNetZip 使用此代码页,这意味着其中一些字符由于回退而以奇怪的方式映射。例如,您的密码映射到以下内容(忽略?,那只是因为它们不是真正的字符):

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

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