【发布时间】:2018-12-11 15:16:48
【问题描述】:
我正在尝试使用 DotNetZip 对 zip 文件进行密码保护。但它不起作用。它可以很好地创建 zip,但是如果我使用 7zip 打开它,我可以在没有密码的情况下提取文件。这是我正在使用的代码。
using (ZipFile zip = new ZipFile())
{
zip.Password = password;
zip.Encryption = EncryptionAlgorithm.WinZipAes256;
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestSpeed;
// Adding folders in the base directory
foreach (var item in Directory.GetDirectories(someFilePath))
{
string folderName = new DirectoryInfo(item).Name;
zip.AddDirectory(item, folderName);
}
// Adding files in the base directory
foreach (string file in Directory.GetFiles(someFilePath))
{
zip.AddFile(file, "");
}
zip.Save(someFilePath);
}
【问题讨论】:
-
您已确认无需密码即可查看和提取? DotNetZip 上的文档说您可以在受密码保护的情况下查看文件,只是没有它们就无法提取。
-
我在问题 as-is 中使用了您的代码,生成的 ZIP 文件受密码保护。你的问题出在别的地方。您是否在测试过程中犯了错误?您是否测试了实际创建的 ZIP 存档,而不是意外创建的另一个(旧测试)ZIP 存档?您的真实代码与问题不同吗?
-
我同意@elgonzo,您编写的代码运行良好。我可以看到文件,但不提供密码就无法提取。
-
另一种可能性:您的 7-zip 安装是否可能已经存储/缓存/记忆了密码,使其无需再次询问密码?
-
Gilliduck,是的,我实际上可以提取文件。 Elgonzo,感谢您确认我的代码有效。我试过用winzip解压,也解压得很好。所以应该不是 7zip 缓存的问题。
标签: c# zip compression dotnetzip