Decompressing password-protected ZIP files with .N

2019-01-11 16:27发布

问题:

Microsoft introduces improvements for ZIP file handling in .NET 4.5 in the System.IO.Compression namespace. Namely the classes ZipArchive and ZipFile. However, I have not yet seen a way to use native .NET ZIP file handling for password protected files. Is there a way to achieve this? (I am aware that there are pretty good 3rd party zip file libraries, that is not the question.)

回答1:

Unfortunately not. There is no support within the .Net Framework 4.5 for password protected zip files. In this case you have to switch to one of the well known 3rd party libraries.



回答2:

As pointed out, DotNetZip is your friend. Unpacking your zip file is as easy as

using ( ZipFile archive = new ZipFile( @"c:\path\to\your\password\protected\archive.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:\path\to\unzip\directory\", ExtractExistingFileAction.Throw ) ;
}

In my experience, DotNetZip runs about as fast as Info-Zip's open source unzip utility and uses roughly the same amount of memory.


Edited To Note: DotNetZip used to live at Codeplex. Codeplex has been shut down. The old archive is still available at Codeplex. It looks like the code has migrated to Github:

  • https://github.com/DinoChiesa/DotNetZip. Looks to be the original author's repo.
  • https://github.com/haf/DotNetZip.Semverd. This looks to be the currently maintained version. It's also packaged up an available via Nuget at https://www.nuget.org/packages/DotNetZip/



回答3:

The ionic method is awesome. I tried three other approaches, and it is by far the best. Don't waste time, just use it.

https://dotnetzip.codeplex.com/wikipage?title=PS-Examples

Supports password encrypted, and other zip options.



回答4:

In looking at the methods provided by the 4.5 framework there is not a method that allows passwords with zip files. As mentioned in your question 3rd party is going to be your best bet.



回答5:

There does not appear to be any support for password protected zip files in the native .net 4.5 library, similar to how there does not appear to be support in windows explorer, even with Windows 10! Some people have reported that they have zip corruption issues using the 3rd party DotNetLib, so make sure you extensively test if you do go down that path or try SharpZipLib instead.