| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
cymt
10年前发布

c#通过DES加密算法加密大文件

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);       }   }