这里我们选用ICSharpCode.SharpZipLib这个类库来实现我们的需求。

下载地址: http://icsharpcode.github.io/SharpZipLib/

1.单个或多个文件加密压缩

class ZipClass
public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel, int BlockSize)
if (!System.IO.File.Exists(FileToZip))
throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd");
System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
ZipEntry ZipEntry = new ZipEntry("ZippedFile");
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(CompressionLevel);
byte[] buffer = new byte[BlockSize];
System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
ZipStream.Write(buffer, 0, size);
while (size < StreamToZip.Length)
int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
ZipStream.Write(buffer, 0, sizeRead);
size += sizeRead;
catch (System.Exception ex)
throw ex;
ZipStream.Finish();
ZipStream.Close();
StreamToZip.Close();
/// <summary>
/// 文件加密压缩
/// </summary>
/// <param name="FileToZip">需要压缩的文件路径</param>
/// <param name="ZipedFile">压缩包路径(压缩包文件类型看自己需求)</param>
/// <param name="password">加密密码</param>
public void ZipFileMain(string FileToZip, string ZipedFile, string password)
ZipOutputStream s = new ZipOutputStream(File.Create(ZipedFile));
s.SetLevel(6); // 0 - store only to 9 - means best compression
s.Password = md5.encrypt(password);
//打开压缩文件 
FileStream fs = File.OpenRead(FileToZip);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
Array arr = FileToZip.Split('\\');
string le = arr.GetValue(arr.Length - 1).ToString();
ZipEntry entry = new ZipEntry(le);
entry.DateTime = DateTime.Now;
entry.Size = fs.Length;
fs.Close();
s.PutNextEntry(entry);
s.Write(buffer, 0, buffer.Length);
s.Finish();
s.Close();

2.单个或多个加密压缩包解压

 1 class UnZipClass
 3         public void UnZip(string directoryName, string ZipedFile, string password)
 5             using (FileStream fileStreamIn = new FileStream(ZipedFile, FileMode.Open, FileAccess.Read))
 7                 using (ZipInputStream zipInStream = new ZipInputStream(fileStreamIn))
 9                     zipInStream.Password = md5.encrypt(password);
10                     ZipEntry entry = zipInStream.GetNextEntry();
11                     WebContext.SqlfilePath =directoryName+"\\"+ entry.Name;
12                     do
13                     {
14                         using (FileStream fileStreamOut = new FileStream(directoryName + @"\" + entry.Name, FileMode.Create, FileAccess.Write))
15                         {
17                             int size = 2048;
18                             byte[] buffer = new byte[2048];
19                             do
20                             {
21                                 size = zipInStream.Read(buffer, 0, buffer.Length);
22                                 fileStreamOut.Write(buffer, 0, size);
23                             } while (size > 0);
24                         }
25                     } while ((entry = zipInStream.GetNextEntry()) != null);
26                 }
27             }
28         }
View Code

3.Md5

 1  class md5
 3         #region "MD5加密"
 4         /// <summary>
 5         ///32位 MD5加密
 6         /// </summary>
 7         /// <param name="str">加密字符</param>
 8         /// <returns></returns>
 9         public static string encrypt(string str)
10         {
11             string cl = str;
12             string pwd = "";
13             MD5 md5 = MD5.Create();
14             byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
15             for (int i = 0; i < s.Length; i++)
16             {
17                 pwd = pwd + s[i].ToString("X");
18             }
19             return pwd;
20         }
21         #endregion
View Code