C# AES/ECB/PKCS5Padding实现AES的加密及解密

最近开发中遇到了C# 中使用AES/ECB/PKCS5Padding进行加解密操作,之前每次使用都得网上找资料,记录方便后期使用。

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Common
{
    internal class AESHelper
    {
        public static string AESDecrypt(string strinput, string strkey)
        {
            try
            {
                string dummyData = strinput.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+").Replace("_","/").Replace("-","+");
                if (dummyData.Length % 4 > 0)
                {
                    dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
                }
                byte[] inputArray = Convert.FromBase64String(dummyData);
                byte[] key = Encoding.UTF8.GetBytes(strkey);

                IBufferedCipher cipher = CipherUtilities.GetCipher("AES/ECB/PKCS5Padding");

                cipher.Init(false, AesKey(strkey));
                // cipher.Init(false, new ParametersWithIV(new DesParameters(key), key)); 带IV向量的算法可以用到。
                byte[] rv = new byte[cipher.GetOutputSize(inputArray.Length)];
                int tam = cipher.ProcessBytes(inputArray, 0, inputArray.Length, rv, 0);
                cipher.DoFinal(rv, tam);
                return Encoding.UTF8.GetString(rv);

            }
            catch (Exception ex)
            {

                return "";

            }

        }

        public static string AESEncrypt(string strinput, string strkey)
        {
            try
            {
                byte[] inputArray = Encoding.UTF8.GetBytes(strinput);
                byte[] key = Encoding.UTF8.GetBytes(strkey);

                IBufferedCipher cipher = CipherUtilities.GetCipher("AES/ECB/PKCS5Padding");
                //cipher.Init(true, new ParametersWithIV(new DesParameters(key), key));
                cipher.Init(true, AesKey(strkey));
                byte[] rv = new byte[cipher.GetOutputSize(inputArray.Length)];
                int tam = cipher.ProcessBytes(inputArray, 0, inputArray.Length, rv, 0);
                cipher.DoFinal(rv, tam);
                return Convert.ToBase64String(rv);

            }
            catch (Exception ex)
            {
                return "";
            }
        }


        public static KeyParameter AesKey(String key)
        {
            byte[] bs = Encoding.Default.GetBytes(key);
            if (bs.Length != 16)
            {
                bs = Arrays.CopyOf(bs, 16);// 处理数组长度为16(不足16位,不空;超过16位取前16位)
            }
            return new KeyParameter(bs);
        }
    }
}

posted @ 2022-12-03 09:09  星火燎猿*  阅读(2209)  评论(0)    收藏  举报