/// <summary> 对字符串进行对称加密 </summary> public static string SymmetricEncrypt(string inputString, SymmetricFormat symmetricFormat, string key, string iv) { var algorithm = GetSymmetricAlgorithm(symmetricFormat); var desString = Encoding.UTF8.GetBytes(inputString); var desKey = Encoding.ASCII.GetBytes(key); var desIv = Encoding.ASCII.GetBytes(iv); if (!algorithm.ValidKeySize(desKey.Length * 8)) { throw new ArgumentOutOfRangeException("key"); } if (algorithm.IV.Length != desIv.Length) { throw new ArgumentOutOfRangeException("iv"); } var mStream = new MemoryStream(); var cStream = new CryptoStream(mStream, algorithm.CreateEncryptor(desKey, desIv), CryptoStreamMode.Write); cStream.Write(desString, 0, desString.Length); cStream.FlushFinalBlock(); cStream.Close(); return(Convert.ToBase64String(mStream.ToArray())); }
/// <summary> 获取对称加密方法 </summary> private static SymmetricAlgorithm GetSymmetricAlgorithm(SymmetricFormat symmetricFormat) { SymmetricAlgorithm algorithm = null; switch (symmetricFormat) { case SymmetricFormat.DES: algorithm = DES.Create(); break; case SymmetricFormat.TripleDES: algorithm = TripleDES.Create(); break; case SymmetricFormat.RC2: algorithm = RC2.Create(); break; case SymmetricFormat.Rijndael: algorithm = Rijndael.Create(); break; case SymmetricFormat.AES: algorithm = Aes.Create(); break; } return(algorithm); }
/// <summary> 获取对称加密方法 </summary> private static SymmetricAlgorithm GetSymmetricAlgorithm(SymmetricFormat symmetricFormat) { SymmetricAlgorithm algorithm; switch (symmetricFormat) { case SymmetricFormat.DES: algorithm = DES.Create(); break; case SymmetricFormat.TripleDES: algorithm = TripleDES.Create(); break; case SymmetricFormat.RC2: algorithm = RC2.Create(); break; case SymmetricFormat.Rijndael: algorithm = Rijndael.Create(); break; case SymmetricFormat.AES: algorithm = Aes.Create(); break; default: throw new ArgumentOutOfRangeException(nameof(symmetricFormat), symmetricFormat, null); } return(algorithm); }
/// <summary> 对字符串进行对称解密 </summary> public static string SymmetricDecrypt(string inputString, SymmetricFormat symmetricFormat, string key, string iv) { if (string.IsNullOrWhiteSpace(inputString)) { return(inputString); } inputString = inputString.CleanBase64(); if (!inputString.IsBase64()) { return(string.Empty); } var algorithm = GetSymmetricAlgorithm(symmetricFormat); var desString = Convert.FromBase64String(inputString); var desKey = Encoding.ASCII.GetBytes(key); var desIv = Encoding.ASCII.GetBytes(iv); var mStream = new MemoryStream(); var cStream = new CryptoStream(mStream, algorithm.CreateDecryptor(desKey, desIv), CryptoStreamMode.Write); cStream.Write(desString, 0, desString.Length); cStream.FlushFinalBlock(); cStream.Close(); return(Encoding.UTF8.GetString(mStream.ToArray())); }
/// <summary> /// 对字符串进行对称解密 /// </summary> public static string SymmetricDecrypt(string inputString, SymmetricFormat symmetricFormat, string key, string iv) { SymmetricAlgorithm algorithm = GetSymmetricAlgorithm(symmetricFormat); byte[] desString = Convert.FromBase64String(inputString); byte[] desKey = Encoding.ASCII.GetBytes(key); byte[] desIV = Encoding.ASCII.GetBytes(iv); MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, algorithm.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write); cStream.Write(desString, 0, desString.Length); cStream.FlushFinalBlock(); cStream.Close(); return(Encoding.UTF8.GetString(mStream.ToArray())); }
/// <summary> /// 获取加密方法 /// </summary> /// <param name="symmetricFormat"></param> /// <returns></returns> private static SymmetricAlgorithm GetSymmetricAlgorithm(SymmetricFormat symmetricFormat) { SymmetricAlgorithm algorithm = null; switch (symmetricFormat) { case SymmetricFormat.DES: algorithm = DES.Create(); break; case SymmetricFormat.TripleDES: algorithm = TripleDES.Create(); break; case SymmetricFormat.RC2: algorithm = RC2.Create(); break; case SymmetricFormat.Rijindael: algorithm = Rijndael.Create(); break; case SymmetricFormat.AES: algorithm = Aes.Create(); break; } return algorithm; }
/// <summary> /// 对字符串进行对称加密 /// </summary> /// <param name="inputString"></param> /// <param name="symmetricFormat"></param> /// <param name="key"></param> /// <param name="iv"></param> /// <returns></returns> public static string SymmetricEncrypt(string inputString, SymmetricFormat symmetricFormat, string key, string iv) { SymmetricAlgorithm algorithm = GetSymmetricAlgorithm(symmetricFormat); byte[] desString = Encoding.UTF8.GetBytes(inputString); byte[] desKey = Encoding.UTF8.GetBytes(key.Substring(0, algorithm.Key.Length)); byte[] desIV = Encoding.UTF8.GetBytes(iv.Substring(0, algorithm.IV.Length)); MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, algorithm.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write); cStream.Write(desString, 0, desString.Length); cStream.FlushFinalBlock(); cStream.Close(); return Convert.ToBase64String(mStream.ToArray()); }