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 似乎是闭源的,所以我无法验证它的用途。
当我用下面的代码(指定密码)打开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 似乎是闭源的,所以我无法验证它的用途。