无法使用Rebex库正确创建受密码保护的zip文件

时间:2018-12-27 20:49:37

标签: c# rebex

我正在尝试使用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无法完成提取。无法创建目标文件'

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

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

2 个答案:

答案 0 :(得分:2)

更新:

客户端使用Windows操作系统内置的ZIP提取程序来提取生成的ZIP存档。不幸的是,Windows OS提取程序无法进行AES加密,这导致了所提到的错误。可以在Rebex forum上找到更多详细信息和可能的解决方案。


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

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

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

答案 1 :(得分:0)

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

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

Windows提取器唯一支持的加密算法是旧版EncryptionAlgorithm.Zip20算法,该算法目前不安全(您可以here对其进行检查)。

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