2

我正在尝试使用 Rebex 库创建受密码保护的 zip 文件。

这是我使用的代码

using (ZipArchive zip = new ZipArchive(ZipFilePath, ArchiveOpenMode.Create))
{
   // Set the Password first
   zip.Password = strUserPIN;

   // Change the default Encryption algorithm
   zip.EncryptionAlgorithm = EncryptionAlgorithm.Aes256;

   // Add the file to newly created "files" folder within the zip file
   zip.AddFile(Temp_BPI_SaveLocation + strDataFilewithTimeStamp, @"\files\");

   //Save the Zip file
   zip.Save();

   // cloase the zip file
   zip.Close();
}

但是,当我尝试打开文件时,我没有得到预期的“需要密码”对话框。

相反,我收到错误消息“Windows 无法完成提取。无法创建目标文件'

我确实需要获得预期的“需要密码”对话框,以便正确提取文件

有没有人处理过这个问题并找到了解决方案?

4

2 回答 2

2

更新:

客户端使用 Windows 操作系统内置的 ZIP 提取器来提取生成的 ZIP 存档。不幸的是,Windows 操作系统提取器无法AES加密,这导致了上述错误。更多细节和可能的解决方案可以在Rebex 论坛上找到。


错误“Windows 无法完成提取。无法创建目标文件'表示文件名包含当前平台的一些无效字符。在您的示例代码中,您用作strDataFilewithTimeStamp文件名参数,其中可能包含冒号“:”,这对于 Windows 上的文件名是无效字符。

这取决于提取器在这种情况下将显示什么(密码对话框或错误)。

要解决此问题,请确保文件名不包含任何 Windows 上的无效字符(请检查System.IO.Path.GetInvalidFileNameChars()Windows 平台上的方法)。

于 2018-12-28T13:07:52.247 回答
0

这是我从 Rebex 论坛接受的答案

“这表明问题出在 Windows 提取器本身。您正在使用 EncryptionAlgorithm.Aes256 加密 ZIP 存档,这是一个不错的选择,但 Windows 提取器不支持此加密算法(请检查)。

Windows 提取器支持的唯一加密算法是传统的 EncryptionAlgorithm.Zip20 算法,目前不安全(您可以在此处查看)。

建议的解决方案是使用 EncryptionAlgorithm.Aes256 算法来保护 ZIP 存档并使用第三方应用程序来提取它。”

于 2019-01-08T15:23:29.370 回答