views:

966

answers:

9

I want to compress some files (into the ZIP format) and encrypt them if possible using C#. Is there some way to do this?

Can encryption be done as a part of the compression itself?

+10  A: 

For compression, look at the System.IO.Compression namespace and for encryption look at System.Security.Cryptography.

Skizz

Skizz
NOTE: System.IO.Compression is great for compressing individual files. It does not compress multiple source files into a single zip 'archive.'
Scott Fletcher
A: 

Here is a useful topic:

http://stackoverflow.com/questions/71000/help-in-creating-zip-files-from-net-and-reading-them-from-java

System.IO.Packaging namespace gives you useful classes to compress data in zip format and support rights management.

aku
+1  A: 

The GZipStream class is a native way to handle compression.

As for encryption, there are many ways to do it, most of them in the System.Security namespace. They can be done chained (encrypt a compressed stream or compress an encrypted stream).

Vinko Vrsalovic
It's difficult to compress an encrypted stream, since you can't compress random data.
Mason Wheeler
You certainly can compress random data, it'll just end up using nearly the same amount of space.
Vinko Vrsalovic
A: 

There isn't anything you can use directly in C#, however you can use some libraries from J# to do it for you:

http://msdn.microsoft.com/en-us/magazine/cc164129.aspx

Should do just what you want?

With regards to the encryption, have a look at these links:

http://www.codeproject.com/KB/security/fileencryptdecrypt.aspx

http://www.obviex.com/samples/EncryptionWithSalt.aspx

Mark Ingram
A: 

I'm not sure if the steps can be combined, but .NET has good support for basic crypto. Here's an article on it.

Hank Gay
+7  A: 

For Zip Compression, have you seen http://www.icsharpcode.net/OpenSource/SharpZipLib/

Prakash
A: 

If they cannot be combined, do compression first and then encryption. Compressing an already encrypted file will lead to poor compression ratios, because a lot of redundancy is removed.

Rik
+1  A: 

Chilkat provides .NET libraries for compression and encryption.

Ian Nelson
+4  A: 

I know the question is already old, but I must add my two cents.

First, some definitions:

  • Zip: Archive format for regrouping files and folders into a single file, and optionally encrypting data.
  • Deflate: One of the compression algorithms used within a Zip file to compress the data. The most popular one.
  • GZip: A single file compressed with deflate, with a small header and footer.

Now, System.IO.Compression does not do Zip archiving. It does deflate and gzip compression, thus will compress a single blob of data into another single blob of data.

So, if you're looking for an archive format that can group many files and folders, you need Zip libraries like:

If you only need to compress and encrypt a single blob of data, then look under System.IO.Compression and System.Security.Cryptography.

Martin Plante