读书人

C#中怎么使用DES对zip文件加密?

发布时间: 2012-08-30 09:55:54 作者: rapoo

C#中如何使用DES对zip文件加密???
如题,C#如何使用DES对zip文件加密?
压缩包zip文件中含有txt、excel、图片以及音视频文件;
密钥是固定的,如“2012-deszip”,请问各位大侠们,该如何实现呢?

[解决办法]

C# code
using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using System.Text;using System.IO;using System.Security.Cryptography;public partial class Default2 : System.Web.UI.Page{  protected void Page_Load(object sender, EventArgs e)  {  }  private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };//自定义密匙  private string filePathA;//储存文件路径  private string filePathB;//储存文件复制后的路径  /// <summary>  /// 文件加密  /// </summary>  /// <param name="inFile">文件储存路径</param>  /// <param name="outFile">储存文件复制的路径</param>  /// <param name="encryptKey"></param>  /// <returns></returns>  public bool EncryptDES(string inFile, string outFile, string encryptKey)  {  byte[] rgb = Keys;  try  {  byte[] rgbKeys = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));  FileStream inFs = new FileStream(inFile, FileMode.Open, FileAccess.Read);//读入流  FileStream outFs = new FileStream(outFile, FileMode.OpenOrCreate, FileAccess.Write);// 等待写入流  outFs.SetLength(0);//帮助读写的变量  byte[] byteIn = new byte[100];//放临时读入的流  long readLen = 0;//读入流的长度  long totalLen = inFs.Length;//读入流的总长度  int everylen=0;//每次读入流的长度  DES des = new DESCryptoServiceProvider();//将inFile加密后放到outFile  CryptoStream encStream = new CryptoStream(outFs, des.CreateEncryptor(rgb, rgbKeys), CryptoStreamMode.Write);  while (readLen < totalLen)  {  everylen = inFs.Read(byteIn, 0, 100);  encStream.Write(byteIn, 0, everylen);  readLen = readLen + everylen;  }  encStream.Close();  inFs.Close();  outFs.Close();  return true;//加密成功  }  catch (Exception ex)  {  Response.Write(ex.Message.ToString());  return false;//加密失败  }  }  public bool DecryptDES(string inFile, string outFile, string encryptKey)  {  byte[] rgb = Keys;  try  {  byte[] rgbKeys = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));  FileStream inFs = new FileStream(inFile, FileMode.Open, FileAccess.Read);//读入流  FileStream outFs = new FileStream(outFile, FileMode.OpenOrCreate, FileAccess.Write);// 等待写入流  outFs.SetLength(0);//帮助读写的变量  byte[] byteIn = new byte[100];//放临时读入的流  long readLen = 0;//读入流的长度  long totalLen = inFs.Length;//读入流的总长度  int everylen=0;//每次读入流的长度  DES des = new DESCryptoServiceProvider();//将inFile加密后放到outFile  CryptoStream encStream = new CryptoStream(outFs, des.CreateDecryptor(rgb, rgbKeys), CryptoStreamMode.Write);  while (readLen < totalLen)  {  everylen = inFs.Read(byteIn, 0, 100);  encStream.Write(byteIn, 0, everylen);  readLen = readLen + everylen;  }  encStream.Close();  inFs.Close();  outFs.Close();  return true;//加密成功  }  catch (Exception ex)  {  Response.Write(ex.Message.ToString());  return false;//加密失败  }  }  /// <summary>  /// 拷贝文件  /// </summary>  public void copyFile()  {  filePathA = this.fei.PostedFile.FileName;//获取文件全部路径  string fileName = this.fei.FileName;  string path = System.IO.Path.GetDirectoryName(filePathA);  filePathB = path + "\\1" + fileName;//重新设置文件名  File.Copy(filePathA, filePathB);  }  protected void btnOK_Click(object sender, EventArgs e)  {  copyFile();  if (EncryptDES(filePathB, filePathA, "mingrisoft"))  {  RegisterStartupScript("false", "<script>alert('加密成功!\\n');</script>");  }  else  {  RegisterStartupScript("false", "<script>alert('失败成功!\\n');</script>");  }  File.Delete(filePathB);  }  protected void btnCancel_Click(object sender, EventArgs e)  {  copyFile();  if (DecryptDES(filePathB, filePathA, "mingrisoft"))  {  RegisterStartupScript("false", "<script>alert('加密成功!\\n');</script>");  }  else  {  RegisterStartupScript("false", "<script>alert('失败成功!\\n');</script>");  }  File.Delete(filePathB);  }} 

读书人网 >C#

热点推荐