用.NET 4.5解压缩密码保护的ZIP文件



Microsoft在system..com.compression namespace中引入了.NET 4.5中的zip文件处理的改进。即Ziparchive和Zipfile的类。但是,我尚未看到一种使用本机.NET zip文件处理来保护密码保护文件的方法。有办法实现这一目标吗?(我知道有很好的第三方zip文件库,这不是问题。)

不幸的是没有。.NET Framework 4.5在密码保护的ZIP文件中没有支持。在这种情况下,您必须切换到著名的第三方库之一。

正如指出的那样,dotnetzip是您的朋友。解开zip文件的包装就像

一样容易
using ( ZipFile archive = new ZipFile( @"c:pathtoyourpasswordprotectedarchive.zip",) )
{
  archive.Password = "your-pass-word-here" ;
  archive.Encryption = EncryptionAlgorithm.PkzipWeak ; // the default: you might need to select the proper value here
  archive.StatusMessageTextWriter = Console.Out;
  archive.ExtractAll( @"c:pathtounzipdirectory", ExtractExistingFileAction.Throw ) ;
}

根据我的经验,dotnetzip的运行速度与info-zip的开源Unzip实用程序一样快,并且使用大致相同的内存。


编辑为注: dotnetzip用于Codeplex。Codeplex已关闭。旧存档仍在Codeplex上可用。看来代码已迁移到github:

  • https://github.com/dinochiesa/dotnetzip。看起来是原始作者的回购。
  • https://github.com/haf/dotnetzip.semverd。这看起来是当前维护的版本。它还可以通过nuget https://www.nuget.org/packages/dotnetzip/
  • 打包了一个可用的可用

离子方法很棒。我尝试了另外三种方法,这是迄今为止最好的方法。不要浪费时间,只使用它。

https://dotnetzip.codeplex.com/wikipage?title=ps-examples

支持密码加密和其他zip选项。

在查看4.5框架提供的方法时,没有一种允许使用zip文件的密码的方法。如您的问题,第三方将是您最好的选择。

似乎在本机.NET 4.5库中对受密码保护的zip文件没有任何支持,类似于Windows Explorer中似乎没有支持的方式,即使Windows 10呢有人报告说,他们使用第三方Dotnetlib有拉链腐败问题,因此请确保您广泛测试您是否确实走这条路或尝试Sharpziplib。

针对那些针对的.NET标准2.0,Sharpziplib做得很好,可以优雅地提取内存密码保护的ZIP文件到字节[]。

https://github.com/icsharpcode/sharpziplib

在相同的方案中尝试了离子,但可以用ZipinputStream提取文件,该文件生成了损坏的提取的字节数组。

我发现在C#
中解压缩的方式非常简单安装PM(如果有可能,您可以找到新版本!)

Install-Package Ionic.Zip -Version 1.9.1.8

代码C#

string zipFile = @"C:UsersFesslersoftDesktopZipTestTest.zip";
string targetDirectory = @"C:UsersFesslersoftDesktopZipTest";
 
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(zipFile))
{
    zip.Password = "1234";
    zip.ExtractAll(targetDirectory, Ionic.Zip.ExtractExistingFileAction.DoNotOverwrite);
}
 
Console.WriteLine("Zip file has been successfully extracted.");
Console.Read();

来源:https://codesnippets.fesslersoft.de/extract-a-password-protected-protected-zip-file-iusing-dotnetzip/

最新更新