#region [说明] //所有使用方法,建议自查MSDN,以下均给出加密的方式 #endregion #region [对称加密] #region [EDS加密算法] //原理参考http://wenku.baidu.com/view/079701d3240c844769eaeef6.html //使用类名 TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); #region [参考代码] #region [加密] //随机生成密钥Key 和初始化向量IV tdes.GenerateKey(); tdes.GenerateIV(); //需要的3个参数 string str = "原始需要加密的串"; byte[] Key = tdes.tdes; byte[] IV = tdes.IV; //得到加密后的字节流 //创建一个内存流 MemoryStream memoryStream = new MemoryStream(); //使用传递的私钥和IV 创建加密流 CryptoStream cryptoStream = new CryptoStream(memoryStream, new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV), CryptoStreamMode.Write); //将传递的字符串转换为字节数组 byte[] toEncrypt = Encoding.UTF8.GetBytes(str); //将字节数组写入加密流,并清除缓冲区 cryptoStream.Write(toEncrypt, 0, toEncrypt.Length); cryptoStream.FlushFinalBlock(); //得到加密后的字节数组 byte[] encryptedBytes = memoryStream.ToArray(); #endregion #region [解密] //直接使用加密后的串 byte[] dataBytes = encryptedBytes; //根据加密后的字节数组创建一个内存流 MemoryStream memoryStream = new MemoryStream(dataBytes); //使用传递的私钥、IV 和内存流创建解密流 CryptoStream cryptoStream = new CryptoStream(memoryStream, new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV), CryptoStreamMode.Read); //创建一个字节数组保存解密后的数据 byte[] decryptBytes = new byte[dataBytes.Length]; #endregion #endregion #endregion #region [RI加密算法] //直接MSDN查找使用方式 SymmetricAlgorithm mobjCryptoService; mobjCryptoService = new RijndaelManaged(); #region [代码示例,自行还原] //using System.Text; //using System.IO; //using System; //using System.Text.RegularExpressions; //using System.Security.Cryptography; //namespace LHCHIP.Common // { // /**//// <summary> // /// 对称加密算法类 // /// </summary> // public class DecryptEncrypt // { // /**//// <summary> // /// 返回自身的一个类 // /// </summary> // public static DecryptEncrypt MyDecryptEncrypt // { // get // { // return new DecryptEncrypt(); // } // } // private SymmetricAlgorithm mobjCryptoService; // private string Key; // /**//// <summary> // /// 对称加密类的构造函数 // /// </summary> // internal DecryptEncrypt() // { // mobjCryptoService = new RijndaelManaged(); // Key = "rrp(%&h70x89H$jgsfgfsI0456Ftma81&fvHrr&&76*h%(12lJ$lhj!y6&(*jkPer44a"; // } // /**//// <summary> // /// 获得密钥 // /// </summary> // /// <returns>密钥</returns> // private byte[] GetLegalKey() // { // string _TempKey = Key; // mobjCryptoService.GenerateKey(); // byte[] bytTemp = mobjCryptoService.Key; // int KeyLength = bytTemp.Length; // if (_TempKey.Length > KeyLength) // _TempKey = _TempKey.Substring(0, KeyLength); // else if (_TempKey.Length < KeyLength) // _TempKey = _TempKey.PadRight(KeyLength, ’ ’); // return ASCIIEncoding.ASCII.GetBytes(_TempKey); // } // /**//// <summary> // /// 获得初始向量IV // /// </summary> // /// <returns>初试向量IV</returns> // private byte[] GetLegalIV() // { // string _TempIV = "@afetj*Ghg7!rNIfsgr95GUqd9gsrb#GG7HBh(urjj6HJ($jhWk7&!hjjri%$hjk"; // mobjCryptoService.GenerateIV(); // byte[] bytTemp = mobjCryptoService.IV; // int IVLength = bytTemp.Length; // if (_TempIV.Length > IVLength) // _TempIV = _TempIV.Substring(0, IVLength); // else if (_TempIV.Length < IVLength) // _TempIV = _TempIV.PadRight(IVLength, ’ ’); // return ASCIIEncoding.ASCII.GetBytes(_TempIV); // } // /**//// <summary> // /// 加密方法 // /// </summary> // /// <param name="Source">待加密的串</param> // /// <returns>经过加密的串</returns> // public string Encrypto(string Source) // { // byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source); // MemoryStream ms = new MemoryStream(); // mobjCryptoService.Key = GetLegalKey(); // mobjCryptoService.IV = GetLegalIV(); // //创建对称加密器对象 // ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor(); // //定义将数据流链接到加密转换的流 // CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write); // cs.Write(bytIn, 0, bytIn.Length); // cs.FlushFinalBlock(); // ms.Close(); // byte[] bytOut = ms.ToArray(); // return Convert.ToBase64String(bytOut); // } // /**//// <summary> // /// 解密方法 // /// </summary> // /// <param name="Source">待解密的串</param> // /// <returns>经过解密的串</returns> // public string Decrypto(string Source) // { // byte[] bytIn = Convert.FromBase64String(Source); // MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length); // mobjCryptoService.Key = GetLegalKey(); // mobjCryptoService.IV = GetLegalIV(); // //创建对称解密器对象 // ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor(); // //定义将数据流链接到加密转换的流 // CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); // StreamReader sr = new StreamReader(cs); // return sr.ReadToEnd(); // } // } //} #endregion #endregion #endregion #region [非对称加密] //使用默认密钥创建RSACryptoServiceProvider 对象 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); #region [代码示例] #region [加密] //将被加密的字符串转换为字节数组 byte[] dataToEncrypt = Encoding.UTF8.GetBytes("待加密的串"); //得到加密后的字节数组 byte[] encryptedData = rsa.Encrypt(dataToEncrypt, false); Encoding.UTF8.GetString(encryptedData); #endregion #region [解密] //得到解密后的字节数组 byte[] decryptedData = rsa.Decrypt(encryptedData, false); Encoding.UTF8.GetString(decryptedData); #endregion #endregion #endregion