Asp.Net 文件加解密

来源:互联网 发布:python 多行命令 编辑:程序博客网 时间:2024/05/16 10:32
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.IO;  
  4. using System.Linq;  
  5. using System.Security.Cryptography;  
  6. using System.Text;  
  7. using System.Threading.Tasks;  
  8.   
  9. namespace PD.Common  
  10. {  
  11.     public static class AES  
  12.     {  
  13.         #region 加密  
  14.         #region 加密字符串  
  15.         /// <summary>  
  16.         /// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)  
  17.         /// </summary>  
  18.         /// <param name="EncryptString">待加密密文</param>  
  19.         /// <param name="EncryptKey">加密密钥</param>  
  20.         public static string AESEncrypt(string EncryptString, string EncryptKey)  
  21.         {  
  22.             return Convert.ToBase64String(AESEncrypt(Encoding.Default.GetBytes(EncryptString), EncryptKey));  
  23.         }  
  24.         #endregion  
  25.         #region 加密字节数组  
  26.         /// <summary>  
  27.         /// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)  
  28.         /// </summary>  
  29.         /// <param name="EncryptString">待加密密文</param>  
  30.         /// <param name="EncryptKey">加密密钥</param>  
  31.         public static byte[] AESEncrypt(byte[] EncryptByte, string EncryptKey)  
  32.         {  
  33.             if (EncryptByte.Length == 0) { throw (new Exception("明文不得为空")); }  
  34.             if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密钥不得为空")); }  
  35.             byte[] m_strEncrypt;  
  36.             byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ==");  
  37.             byte[] m_salt = Convert.FromBase64String("gsf4jvkyhye5/d7k8OrLgM==");  
  38.             Rijndael m_AESProvider = Rijndael.Create();  
  39.             try  
  40.             {  
  41.                 MemoryStream m_stream = new MemoryStream();  
  42.                 PasswordDeriveBytes pdb = new PasswordDeriveBytes(EncryptKey, m_salt);  
  43.                 ICryptoTransform transform = m_AESProvider.CreateEncryptor(pdb.GetBytes(32), m_btIV);  
  44.                 CryptoStream m_csstream = new CryptoStream(m_stream, transform, CryptoStreamMode.Write);  
  45.                 m_csstream.Write(EncryptByte, 0, EncryptByte.Length);  
  46.                 m_csstream.FlushFinalBlock();  
  47.                 m_strEncrypt = m_stream.ToArray();  
  48.                 m_stream.Close(); m_stream.Dispose();  
  49.                 m_csstream.Close(); m_csstream.Dispose();  
  50.             }  
  51.             catch (IOException ex) { throw ex; }  
  52.             catch (CryptographicException ex) { throw ex; }  
  53.             catch (ArgumentException ex) { throw ex; }  
  54.             catch (Exception ex) { throw ex; }  
  55.             finally { m_AESProvider.Clear(); }  
  56.             return m_strEncrypt;  
  57.         }  
  58.         #endregion  
  59.         #endregion  
  60.  
  61.         #region 解密  
  62.         #region 解密字符串  
  63.         /// <summary>  
  64.         /// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)  
  65.         /// </summary>  
  66.         /// <param name="DecryptString">待解密密文</param>  
  67.         /// <param name="DecryptKey">解密密钥</param>  
  68.         public static string AESDecrypt(string DecryptString, string DecryptKey)  
  69.         {  
  70.             return Convert.ToBase64String(AESDecrypt(Encoding.Default.GetBytes(DecryptString), DecryptKey));  
  71.         }  
  72.         #endregion  
  73.         #region 解密字节数组  
  74.         /// <summary>  
  75.         /// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)  
  76.         /// </summary>  
  77.         /// <param name="DecryptString">待解密密文</param>  
  78.         /// <param name="DecryptKey">解密密钥</param>  
  79.         public static byte[] AESDecrypt(byte[] DecryptByte, string DecryptKey)  
  80.         {  
  81.             if (DecryptByte.Length == 0) { throw (new Exception("密文不得为空")); }  
  82.             if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密钥不得为空")); }  
  83.             byte[] m_strDecrypt;  
  84.             byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ==");  
  85.             byte[] m_salt = Convert.FromBase64String("gsf4jvkyhye5/d7k8OrLgM==");  
  86.             Rijndael m_AESProvider = Rijndael.Create();  
  87.             try  
  88.             {  
  89.                 MemoryStream m_stream = new MemoryStream();  
  90.                 PasswordDeriveBytes pdb = new PasswordDeriveBytes(DecryptKey, m_salt);  
  91.                 ICryptoTransform transform = m_AESProvider.CreateDecryptor(pdb.GetBytes(32), m_btIV);  
  92.                 CryptoStream m_csstream = new CryptoStream(m_stream, transform, CryptoStreamMode.Write);  
  93.                 m_csstream.Write(DecryptByte, 0, DecryptByte.Length);  
  94.                 m_csstream.FlushFinalBlock();  
  95.                 m_strDecrypt = m_stream.ToArray();  
  96.                 m_stream.Close(); m_stream.Dispose();  
  97.                 m_csstream.Close(); m_csstream.Dispose();  
  98.             }  
  99.             catch (IOException ex) { throw ex; }  
  100.             catch (CryptographicException ex) { throw ex; }  
  101.             catch (ArgumentException ex) { throw ex; }  
  102.             catch (Exception ex) { throw ex; }  
  103.             finally { m_AESProvider.Clear(); }  
  104.             return m_strDecrypt;  
  105.         }  
  106.         #endregion  
  107.         #endregion  
  108.     }  
  109. }  

[csharp] view plain copy
 print?
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.IO;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.Threading.Tasks;  
  7.   
  8. namespace PD.Common  
  9. {  
  10.    public class FileEncrypt  
  11.     {  
  12.         #region 变量  
  13.         /// <summary>  
  14.         /// 一次处理的明文字节数  
  15.         /// </summary>  
  16.         public static readonly int encryptSize = 10000000;  
  17.         /// <summary>  
  18.         /// 一次处理的密文字节数  
  19.         /// </summary>  
  20.         public static readonly int decryptSize = 10000016;  
  21.         #endregion  
  22.  
  23.         #region 加密文件  
  24.         /// <summary>  
  25.         /// 加密文件  
  26.         /// </summary>  
  27.         public static void EncryptFile(string Inputpath, string Outputpath, string pwd)  
  28.         {  
  29.             try  
  30.             {  
  31.                 if (File.Exists(Inputpath))  
  32.                 {  
  33.                     using (FileStream fs = new FileStream(Inputpath, FileMode.Open, FileAccess.Read))  
  34.                     {  
  35.                         if (fs.Length > 0)  
  36.                         {  
  37.                             using (FileStream fsnew = new FileStream(Outputpath, FileMode.OpenOrCreate, FileAccess.Write))  
  38.                             {  
  39.                                 //if (File.Exists(path + ".temp")) File.SetAttributes(path + ".temp", FileAttributes.Hidden);  
  40.                                 int blockCount = ((int)fs.Length - 1) / encryptSize + 1;  
  41.                                 for (int i = 0; i < blockCount; i++)  
  42.                                 {  
  43.                                     int size = encryptSize;  
  44.                                     if (i == blockCount - 1) size = (int)(fs.Length - i * encryptSize);  
  45.                                     byte[] bArr = new byte[size];  
  46.                                     fs.Read(bArr, 0, size);  
  47.                                     byte[] result = AES.AESEncrypt(bArr, pwd);  
  48.                                     fsnew.Write(result, 0, result.Length);  
  49.                                     fsnew.Flush();  
  50.                                 }  
  51.                                 fsnew.Close();  
  52.                                 fsnew.Dispose();  
  53.                             }  
  54.                             fs.Close();  
  55.                             fs.Dispose();  
  56.                         }  
  57.                     }  
  58.                 }  
  59.             }  
  60.             catch (Exception ex)  
  61.             {  
  62.                 throw ex;  
  63.             }  
  64.         }  
  65.         #endregion  
  66.         #region 解密文件  
  67.         /// <summary>  
  68.         /// 解密文件  
  69.         /// </summary>  
  70.         public static void DecryptFile(string Inputpath, string Outputpath, string pwd)  
  71.         {  
  72.             try  
  73.             {  
  74.                 if (File.Exists(Inputpath))  
  75.                 {  
  76.                     using (FileStream fs = new FileStream(Inputpath, FileMode.Open, FileAccess.Read))  
  77.                     {  
  78.                         if (fs.Length > 0)  
  79.                         {  
  80.                             using (FileStream fsnew = new FileStream(Outputpath, FileMode.OpenOrCreate, FileAccess.Write))  
  81.                             {  
  82.                                 int blockCount = ((int)fs.Length - 1) / decryptSize + 1;  
  83.                                 for (int i = 0; i < blockCount; i++)  
  84.                                 {  
  85.                                     int size = decryptSize;  
  86.                                     if (i == blockCount - 1) size = (int)(fs.Length - i * decryptSize);  
  87.                                     byte[] bArr = new byte[size];  
  88.                                     fs.Read(bArr, 0, size);  
  89.                                     byte[] result = AES.AESDecrypt(bArr, pwd);  
  90.                                     fsnew.Write(result, 0, result.Length);  
  91.                                     fsnew.Flush();  
  92.                                 }  
  93.                                 fsnew.Close();  
  94.                                 fsnew.Dispose();  
  95.                             }  
  96.                             fs.Close();  
  97.                             fs.Dispose();  
  98.                         }  
  99.                     }  
  100.                 }  
  101.   
  102.             }  
  103.             catch (Exception ex)  
  104.             {  
  105.                 throw ex;  
  106.             }  
  107.         }  
  108.         #endregion  
  109.     }  
  110. }  
0 0
原创粉丝点击