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

cymt 9年前發布 | 2K 次閱讀 C# 算法

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

}</pre>

 本文由用戶 cymt 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!