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

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
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);
     }
 }

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:android开机启动代码

下一篇:C#监控文件夹并自动给图片文件打水印