SoManyGoblins
SoManyGoblins

Reputation: 5917

Decompressing password-protected ZIP files with .NET 4.5

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.)

Upvotes: 39

Views: 57068

Answers (7)

Huy
Huy

Reputation: 508

I found the way is very simple to unzip in c#
Install PM (you can find new version if available!)

Install-Package Ionic.Zip -Version 1.9.1.8

Code C#

string zipFile = @"C:\Users\Fesslersoft\Desktop\ZipTest\Test.zip";
string targetDirectory = @"C:\Users\Fesslersoft\Desktop\ZipTest\";
 
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();

Source: https://codesnippets.fesslersoft.de/extract-a-password-protected-zip-file-using-dotnetzip/

Upvotes: 1

Alberto Silva
Alberto Silva

Reputation: 442

For those targeting .Net Standard 2.0, SharpZipLib does a great work, handling gracefully extraction of in memory password protected zip files to byte[].

https://github.com/icsharpcode/SharpZipLib

Tried Ionic for the same scenario but was enable to extract files with the ZipInputStream, which generated corrupt extracted byte arrays.

Upvotes: 1

Nicholas Carey
Nicholas Carey

Reputation: 74177

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:


Upvotes: 30

Oliver
Oliver

Reputation: 45071

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.

Upvotes: 34

user1253917
user1253917

Reputation: 41

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.

Upvotes: 4

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.

Upvotes: 6

Micah Armantrout
Micah Armantrout

Reputation: 6971

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.

Upvotes: 4

Related Questions