C# .netCore实现AES加解密算法—— AES标准及Rijndael算法解析

AES简介
AES, Advanced Encryption Standard,其实是一套标准:FIPS 197,而我们所说的AES算法其实是Rijndael算法(微信小程序加密传输就是用这个加密算法的)。
NIST (National INstitute of Standards and Technology) 在1997年9月12日公开征集更高效更安全的替代DES加密算法,第一轮共有15种算法入选,其中5种算法入围了决赛,分别是MARS,RC6,Rijndael,Serpent和Twofish。又经过3年的验证、评测及公众讨论之后Rijndael算法最终入选。
Rijndael算法
Rijndael算法是由比利时学者Joan Daemen和Vincent Rijmen所提出的,算法的名字就由两位作者的名字组合而成。Rijndael的优势在于集安全性、性能、效率、可实现性及灵活性与一体。
下面是C#类库实现该算法的代码类库,大家可以参考提意见

using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;

namespace Security.Common
{
    /// 
    /// AES加密,高级加密法
    /// 
    public class AesClass
    {
        /// 
        /// AES-128/AES-192/AES-256
        /// 
        private static string key = "1234567890123abc";
        /// 
        /// AES 加密
        /// 
        /// 明文(待加密)
        /// 密文
        /// 
        public static string aesEncrypt(string encryptStr)
        {
            if (string.IsNullOrEmpty(encryptStr)) return null;
            Byte[] toEncryptArray = Encoding.UTF8.GetBytes(encryptStr);
            RijndaelManaged rm = new RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                Mode = CipherMode.ECB,
                Padding = PaddingMode.PKCS7
            };
            ICryptoTransform cTransform = rm.CreateEncryptor();
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            //需要UTF8处理一下,否则
            return Convert.ToBase64String(Encoding.UTF8.GetBytes( Convert.ToBase64String(resultArray, 0, resultArray.Length)));
        }
        /// 
        ///  AES 解密
        /// 
        /// 明文(待解密)
        /// 密文
        /// 
        public static string aesDecrypt(string decryptStr)
        {
            if (string.IsNullOrEmpty(decryptStr)) return null;
            Byte[] toEncryptArray = Convert.FromBase64String(Encoding.UTF8.GetString( Convert.FromBase64String(decryptStr)));
            RijndaelManaged rm = new RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                Mode = CipherMode.ECB,
                Padding = PaddingMode.PKCS7
            };
            ICryptoTransform cTransform = rm.CreateDecryptor();
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            return Encoding.UTF8.GetString(resultArray);
        }
    }

}

你可能感兴趣的:(C#后端代码记录,core)