这里我们选用ICSharpCode.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);try{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();}////// 文件加密压缩/// /// 需要压缩的文件路径/// 压缩包路径(压缩包文件类型看自己需求)/// 加密密码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 compressions.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 2 { 3 public void UnZip(string directoryName, string ZipedFile, string password) 4 { 5 using (FileStream fileStreamIn = new FileStream(ZipedFile, FileMode.Open, FileAccess.Read)) 6 { 7 using (ZipInputStream zipInStream = new ZipInputStream(fileStreamIn)) 8 { 9 zipInStream.Password = md5.encrypt(password);10 ZipEntry entry = zipInStream.GetNextEntry();11 WebContext.SqlfilePath =directoryName+"\\"+ entry.Name;12 do13 {14 using (FileStream fileStreamOut = new FileStream(directoryName + @"\" + entry.Name, FileMode.Create, FileAccess.Write))15 {16 17 int size = 2048;18 byte[] buffer = new byte[2048];19 do20 {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 }29 }
3.Md5
1 class md5 2 { 3 #region "MD5加密" 4 ///5 ///32位 MD5加密 6 /// 7 /// 加密字符 8 ///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 #endregion22 }