/// <summary> /// AES解密base64字符串并获得结果(AES decrypts the base64 string and gets the result) /// </summary> /// <param name="input">解密字符串</param> /// <param name="key">AES KEY</param> /// <param name="iv">AES IV</param> /// <param name="cipherMode">密码模式</param> /// <param name="paddingMode">填充模式</param> /// <returns></returns> public static string AESDecryptFromBase64(string input, string key, string iv = "", AesCipherMode cipherMode = AesCipherMode.CBC, AesPaddingMode paddingMode = AesPaddingMode.PKCS7Padding) { var bytes = Convert.FromBase64String(input); return(AESDecryptFromBytes(bytes, key, iv, cipherMode, paddingMode)); }
/// <summary> /// AES解密十六进制字符串并获得结果(AES decrypts the hex string and gets the result) /// </summary> /// <param name="input">解密字符串</param> /// <param name="key">AES KEY</param> /// <param name="iv">AES IV</param> /// <param name="cipherMode">密码模式</param> /// <param name="paddingMode">填充模式</param> /// <returns></returns> public static string AESDecryptFromHex(string input, string key, string iv = null, AesCipherMode cipherMode = AesCipherMode.CBC, AesPaddingMode paddingMode = AesPaddingMode.PKCS7Padding) { var bytes = new byte[input.Length / 2]; for (int index = 0; index < input.Length / 2; index++) { var @char = input.Substring(index * 2, 2); bytes[index] = Convert.ToByte(@char, 16); } return(AESDecryptFromBytes(bytes, key, iv, cipherMode, paddingMode)); }
/// <summary> /// AES加密字符串并获得十六进制字符串结果(AES encrypts the string and gets the hex string result) /// </summary> /// <param name="input">加密字符串</param> /// <param name="key">AES KEY</param> /// <param name="iv">AES IV</param> /// <param name="cipherMode">密码模式</param> /// <param name="paddingMode">填充模式</param> /// <returns></returns> public static string AESEncryptToHex(string input, string key, string iv = null, AesCipherMode cipherMode = AesCipherMode.CBC, AesPaddingMode paddingMode = AesPaddingMode.PKCS7Padding) { var bytes = AESEncryptToBtyes(input, key, iv, cipherMode, paddingMode); var builder = new StringBuilder(); foreach (var @byte in bytes) { builder.AppendFormat("{0:x2}", @byte); } return(builder.ToString()); }
/// <summary> /// AES解密字节数组并获得结果(AES decrypts the byte array and gets the result) /// </summary> /// <param name="input">字节数组</param> /// <param name="key">AES KEY</param> /// <param name="iv">AES IV</param> /// <param name="cipherMode">密码模式</param> /// <param name="paddingMode">填充模式</param> /// <returns></returns> public static string AESDecryptFromBytes(byte[] input, string key, string iv = null, AesCipherMode cipherMode = AesCipherMode.CBC, AesPaddingMode paddingMode = AesPaddingMode.PKCS7Padding) { //AES 加密算法 var algorithm = string.Format("{0}/{1}/{2}", "AES", cipherMode.ToString(), paddingMode.GetDescription()); //AES 算法实例 var cipher = CipherUtilities.GetCipher(algorithm); //ECB模式下 传入IV无效 if (cipherMode == AesCipherMode.ECB) { iv = null; } if (string.IsNullOrWhiteSpace(iv)) { cipher.Init(false, ParameterUtilities.CreateKeyParameter("AES", Encoding.UTF8.GetBytes(key))); } else { cipher.Init(false, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", Encoding.UTF8.GetBytes(key)), Encoding.UTF8.GetBytes(iv))); } var bytes = cipher.DoFinal(input); return(Encoding.UTF8.GetString(bytes)); }
/// <summary> /// AES加密字符串并获得base64字符串结果(AES encrypts the string and gets the base64 string result) /// </summary> /// <param name="input">加密字符串</param> /// <param name="key">AES KEY</param> /// <param name="iv">AES IV</param> /// <param name="cipherMode">密码模式</param> /// <param name="paddingMode">填充模式</param> /// <returns></returns> public static string AESEncryptToBase64(string input, string key, string iv = null, AesCipherMode cipherMode = AesCipherMode.CBC, AesPaddingMode paddingMode = AesPaddingMode.PKCS7Padding) { var bytes = AESEncryptToBtyes(input, key, iv, cipherMode, paddingMode); return(Convert.ToBase64String(bytes)); }