Пример #1
0
        /// <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));
        }