当我使用以下代码打开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");
}
答案 0 :(得分:1)
问题在于内部DotNetZip在转换密码时使用IBM437代码页而不是unicode(在源here中查找StringToByteArray)。代码页最初是IBM PC中的代码页,所以它可能就是PkZip选择它的原因。因为DotNetZip使用此代码页,这意味着由于回退,其中一些字符以奇怪的方式映射。例如,您的密码映射到以下(忽略?,这只是因为那些不是真正的字符):
ï - 0x8b - ?,Á - 0x41 - A,× - 0x78 - x,é - 0x82 - ?,Ö - 0x99 - ?,Ë - 0x45 - E,Ø - 0x4f - O。
除非IZArc使用完全相同的回退行为,否则您将无法解密该文件。不幸的是IZArc似乎是闭源的,所以我无法验证它的用途。