C# 对应 JAVA 的 AES.encryptBase64() 方法的加密,解密

不打扰是莪最后的温柔 提交于 2019-12-10 15:54:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace WebSite.ClassLib
{
    public class AESHelper
    {
            #region Aes加密
            /// <summary>
            /// Aes加密
            /// </summary>
            /// <param name="data">明文</param>
            /// <param name="bkey">密钥</param>
            /// <returns>解密后的字符串</returns>
            public static string AesEncrypt(string data, Byte[] bkey)
            {
                MemoryStream mStreram = new MemoryStream();
                RijndaelManaged aes = new RijndaelManaged();

                byte[] plainbyets = Encoding.UTF8.GetBytes(data);
                //Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bkey.Length)), bkey, bkey.Length);

                aes.Mode = CipherMode.ECB;
                aes.Padding = PaddingMode.PKCS7;
                aes.KeySize = 128;
                aes.Key = bkey;
                CryptoStream crypttostream = new CryptoStream(mStreram, aes.CreateEncryptor(), CryptoStreamMode.Write);
                try
                {
                    crypttostream.Write(plainbyets, 0, plainbyets.Length);
                    crypttostream.FlushFinalBlock();
                    return Convert.ToBase64String(mStreram.ToArray());
                }
                finally
                {
                    crypttostream.Close();
                    mStreram.Close();
                    aes.Clear();
                }
            }
            #endregion

            #region  AES解密
            /// <summary>
            /// AES解密
            /// </summary>
            /// <param name="data">被加密的明文</param>
            /// <param name="bkey">密钥</param>
            /// <returns>明文</returns>
            public static string AESDecrypt(String data, Byte[] bkey)
            {
                Byte[] encryptedBytes = Convert.FromBase64String(data);
                // Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bkey.Length)), bkey, bkey.Length);

                MemoryStream mStream = new MemoryStream(encryptedBytes);
                RijndaelManaged aes = new RijndaelManaged();
                aes.Mode = CipherMode.ECB;
                aes.Padding = PaddingMode.PKCS7;
                aes.KeySize = 128;
                aes.Key = bkey;

                CryptoStream cryptoStream = new CryptoStream(mStream, aes.CreateDecryptor(), CryptoStreamMode.Read);
                try
                {
                    byte[] tmp = new byte[encryptedBytes.Length + 32];
                    int len = cryptoStream.Read(tmp, 0, encryptedBytes.Length + 32);
                    byte[] ret = new byte[len];
                    Array.Copy(tmp, 0, ret, 0, len);
                    return Encoding.UTF8.GetString(ret);
                }
                finally
                {
                    cryptoStream.Close();
                    mStream.Close();
                    aes.Clear();
                }
            }
            #endregion
        }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!