代码:
1、AES加密类
using System;using System.IO;using System.Security.Cryptography;using System.Text;namespace Utils{ /// <summary> /// AES加密解密 /// </summary> public class AES { #region 加密 #region 加密字符串 /// <summary> /// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// </summary> /// <param name="EncryptString">待加密密文</param> /// <param name="EncryptKey">加密密钥</param> public static string AESEncrypt(string EncryptString, string EncryptKey) { return Convert.ToBase64String(AESEncrypt(Encoding.Default.GetBytes(EncryptString), EncryptKey)); } #endregion #region 加密字节数组 /// <summary> /// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// </summary> /// <param name="EncryptString">待加密密文</param> /// <param name="EncryptKey">加密密钥</param> public static byte[] AESEncrypt(byte[] EncryptByte, string EncryptKey) { if (EncryptByte.Length == 0) { throw (new Exception("明文不得为空")); } if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密钥不得为空")); } byte[] m_strEncrypt; byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ=="); byte[] m_salt = Convert.FromBase64String("gsf4jvkyhye5/d7k8OrLgM=="); Rijndael m_AESPRovider = Rijndael.Create(); try { MemoryStream m_stream = new MemoryStream(); PassWordDeriveBytes pdb = new PasswordDeriveBytes(EncryptKey, m_salt); ICryptoTransform transform = m_AESProvider.CreateEncryptor(pdb.GetBytes(32), m_btIV); CryptoStream m_CSStream = new CryptoStream(m_stream, transform, CryptoStreamMode.Write); m_csstream.Write(EncryptByte, 0, EncryptByte.Length); m_csstream.FlushFinalBlock(); m_strEncrypt = m_stream.ToArray(); m_stream.Close(); m_stream.Dispose(); m_csstream.Close(); m_csstream.Dispose(); } catch (IOException ex) { throw ex; } catch (CryptographicException ex) { throw ex; } catch (ArgumentException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { m_AESProvider.Clear(); } return m_strEncrypt; } #endregion #endregion #region 解密 #region 解密字符串 /// <summary> /// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// </summary> /// <param name="DecryptString">待解密密文</param> /// <param name="DecryptKey">解密密钥</param> public static string AESDecrypt(string DecryptString, string DecryptKey) { return Convert.ToBase64String(AESDecrypt(Encoding.Default.GetBytes(DecryptString), DecryptKey)); } #endregion #region 解密字节数组 /// <summary> /// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// </summary> /// <param name="DecryptString">待解密密文</param> /// <param name="DecryptKey">解密密钥</param> public static byte[] AESDecrypt(byte[] DecryptByte, string DecryptKey) { if (DecryptByte.Length == 0) { throw (new Exception("密文不得为空")); } if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密钥不得为空")); } byte[] m_strDecrypt; byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ=="); byte[] m_salt = Convert.FromBase64String("gsf4jvkyhye5/d7k8OrLgM=="); Rijndael m_AESProvider = Rijndael.Create(); try { MemoryStream m_stream = new MemoryStream(); PasswordDeriveBytes pdb = new PasswordDeriveBytes(DecryptKey, m_salt); ICryptoTransform transform = m_AESProvider.CreateDecryptor(pdb.GetBytes(32), m_btIV); CryptoStream m_csstream = new CryptoStream(m_stream, transform, CryptoStreamMode.Write); m_csstream.Write(DecryptByte, 0, DecryptByte.Length); m_csstream.FlushFinalBlock(); m_strDecrypt = m_stream.ToArray(); m_stream.Close(); m_stream.Dispose(); m_csstream.Close(); m_csstream.Dispose(); } catch (IOException ex) { throw ex; } catch (CryptographicException ex) { throw ex; } catch (ArgumentException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { m_AESProvider.Clear(); } return m_strDecrypt; } #endregion #endregion }}View Code
2、文件加密类
using System.IO;using System;namespace Utils{ /// <summary> /// 文件加密类 /// </summary> public class FileEncrypt { #region 变量 /// <summary> /// 一次处理的明文字节数 /// </summary> public static readonly int encryptSize = 10000000; /// <summary> /// 一次处理的密文字节数 /// </summary> public static readonly int decryptSize = 10000016; #endregion #region 加密文件 /// <summary> /// 加密文件 /// </summary> public static void EncryptFile(string path, string pwd, RefreshFileProgress refreshFileProgress) { try { if (File.Exists(path + ".temp")) File.Delete(path + ".temp"); using (FileStream fs = new FileStream(path, FileMode.Open, Fileaccess.Read)) { if (fs.Length > 0) { using (FileStream fsnew = new FileStream(path + ".temp", FileMode.OpenOrCreate, FileAccess.Write)) { if (File.Exists(path + ".temp")) File.SetAttributes(path + ".temp", FileAttributes.Hidden); int blockCount = ((int)fs.Length - 1) / encryptSize + 1; for (int i = 0; i < blockCount; i++) { int size = encryptSize; if (i == blockCount - 1) size = (int)(fs.Length - i * encryptSize); byte[] bArr = new byte[size]; fs.Read(bArr, 0, size); byte[] result = AES.AESEncrypt(bArr, pwd); fsnew.Write(result, 0, result.Length); fsnew.Flush(); refreshFileProgress(blockCount, i + 1); //更新进度 } fsnew.Close(); fsnew.Dispose(); } fs.Close(); fs.Dispose(); FileAttributes fileAttr = File.GetAttributes(path); File.SetAttributes(path, FileAttributes.Archive); File.Delete(path); File.Move(path + ".temp", path); File.SetAttributes(path, fileAttr); } } } catch (
新闻热点
疑难解答