/// <summary> /// 加密 /// </summary> public static class Encrypting { #region 使用对称加密、解密 private static string GetEncryptKey() { return ConfigurationManager.AppSettings["EncryptKey"]; } /// <summary> /// 使用对称算法加密 /// </summary> /// <param name="str"></param> /// <param name="encryptKey"></param> /// <returns></returns> public static string SymmetricEncrypts(string str) { string result = string.Empty; byte[] inputData = System.Text.Encoding.UTF8.GetBytes(str); SymmetricAlgorithm Algorithm = null; MemoryStream msTarget = null; CryptoStream encStream = null; try { byte[] kv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; //如需指定加密算法,可在Create()参数中指定字符串 //Create()方法中的参数可以是:DES、RC2 System、Rijndael、TripleDES //采用不同的实现类对IV向量的要求不一样(可以用GenerateIV()方法生成),无参数表示用Rijndael Algorithm = SymmetricAlgorithm.Create();//产生一种加密算法 msTarget = new MemoryStream(); //定义将数据流链接到加密转换的流。 encStream = new CryptoStream(msTarget, Algorithm.CreateEncryptor(Convert.FromBase64String(GetEncryptKey()), kv), CryptoStreamMode.Write); encStream.Write(inputData, 0, inputData.Length); encStream.FlushFinalBlock(); result = Convert.ToBase64String(msTarget.ToArray()); } catch (Exception) { return null; } finally { if (Algorithm != null) Algorithm.Clear(); if (msTarget != null) msTarget.Close(); if (encStream != null) encStream.Close(); } return result; } /// <summary> /// 使用对称算法解密 /// </summary> /// <param name="encryptStr"></param> /// <param name="encryptKey"></param> /// <returns></returns> public static string SymmectricDecrypts(string encryptStr) { string result = string.Empty; SymmetricAlgorithm Algorithm = null; MemoryStream msTarget = null; CryptoStream decStream = null; //加密时使用的是Convert.ToBase64String(),解密时必须使用Convert.FromBase64String() try { byte[] kv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; byte[] encryptData = Convert.FromBase64String(encryptStr); Algorithm = SymmetricAlgorithm.Create(); msTarget = new MemoryStream(); decStream = new CryptoStream(msTarget, Algorithm.CreateDecryptor(Convert.FromBase64String(GetEncryptKey()), kv), CryptoStreamMode.Write); decStream.Write(encryptData, 0, encryptData.Length); decStream.FlushFinalBlock(); result = System.Text.Encoding.Default.GetString(msTarget.ToArray()); } catch (Exception) { return null; } finally { if (Algorithm != null) Algorithm.Clear(); if (msTarget != null) msTarget.Close(); if (decStream != null) decStream.Close(); } return result; } #endregion }