C# AES加密算法

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApplication1
{
    class AESEncryption
    {
        private static byte[] _key1 = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };


        /// <summary>
        /// AES加密算法
        /// </summary>
        /// <param name="plainText">明文字符串</param>
        /// <param name="strKey">密钥</param>
        /// <returns>返回加密后的密文字节数组</returns>
        public static byte[] AESEncrypt(string plainText, string strKey)
        { //分组加密算法
            SymmetricAlgorithm des = Rijndael.Create();
            byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字节数组
                                                                      //设置密钥及密钥向量
            des.Key = Encoding.UTF8.GetBytes(strKey);
            des.IV = _key1;
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            byte[] cipherBytes = ms.ToArray();//得到加密后的字节数组
            cs.Close();
            ms.Close();
            return cipherBytes;
        }
        /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="cipherText">密文字节数组</param>
        /// <param name="strKey">密钥</param>
        /// <returns>返回解密后的字符串</returns>
        public static byte[] AESDecrypt(byte[] cipherText, string strKey)
        {
            SymmetricAlgorithm des = Rijndael.Create();
            des.Key = Encoding.UTF8.GetBytes(strKey);
            des.IV = _key1;
            byte[] decryptBytes = new byte[cipherText.Length];
            MemoryStream ms = new MemoryStream(cipherText);
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read);
            cs.Read(decryptBytes, 0, decryptBytes.Length);
            cs.Close();
            ms.Close();
            return decryptBytes;
        }
    }

}

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApplication1
{




    class Program
    {
        static void Main(string[] args)
        {
            string text = "AES加密算法测试数据"; //明文
            string keys = "dongbinhusasxiny";//密钥,128位            
            byte[] encryptBytes = AESEncryption.AESEncrypt(text, keys);
            //将加密后的密文转换为Base64编码,以便显示,可以查看下结果
            Console.WriteLine("明文:" + text);
            Console.WriteLine("密文:" + Convert.ToBase64String(encryptBytes));
            //解密
            byte[] decryptBytes = AESEncryption.AESDecrypt(encryptBytes, keys);
            //将解密后的结果转换为字符串,也可以将该步骤封装在解密算法中
            string result = Encoding.UTF8.GetString(decryptBytes);
            Console.WriteLine("解密结果:" + result);
            Console.Read();
        }
    }
}

C#中的AES加密算法实现主要基于System.Security.Cryptography命名空间下的Aes类。它提供了两种模式,分别是CBC和ECB模式,其中CBC模式需要指定一个初始化向量(IV)。下面是一个简单的示例代码: ```csharp using System; using System.Security.Cryptography; using System.Text; public class AesEncryption { public static string Encrypt(string plainText, string key, string iv) { byte[] plainBytes = Encoding.UTF8.GetBytes(plainText); byte[] keyBytes = Encoding.UTF8.GetBytes(key); byte[] ivBytes = Encoding.UTF8.GetBytes(iv); using (Aes aes = Aes.Create()) { aes.Key = keyBytes; aes.IV = ivBytes; aes.Mode = CipherMode.CBC; ICryptoTransform encryptor = aes.CreateEncryptor(); byte[] encryptedBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length); string encryptedText = Convert.ToBase64String(encryptedBytes); return encryptedText; } } public static string Decrypt(string encryptedText, string key, string iv) { byte[] encryptedBytes = Convert.FromBase64String(encryptedText); byte[] keyBytes = Encoding.UTF8.GetBytes(key); byte[] ivBytes = Encoding.UTF8.GetBytes(iv); using (Aes aes = Aes.Create()) { aes.Key = keyBytes; aes.IV = ivBytes; aes.Mode = CipherMode.CBC; ICryptoTransform decryptor = aes.CreateDecryptor(); byte[] plainBytes = decryptor.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length); string plainText = Encoding.UTF8.GetString(plainBytes); return plainText; } } } ``` 在上面的代码中,我们通过调用Create()方法来创建一个Aes对象,并设置其Key、IV和Mode属性。然后我们使用CreateEncryptor()方法创建一个加密器对象,使用TransformFinalBlock()方法进行加密操作。解密操作则是使用CreateDecryptor()方法创建一个解密器对象,同样使用TransformFinalBlock()方法进行解密操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值