c#AES加密解密

AES是一个对称密码,旨在取代DES成为广泛使用的标准。密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。AES加密有很多轮的重复和变换。大致步骤如下:1、密钥扩展(KeyExpansion),2、初始轮(Initial Round),3、重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(Final Round),最终轮没有MixColumns。

注:经过个人测试,同一个字符串在不同设备,地域解密,加密是不一样的,必须加密和解密的秘钥要是一样的,才能解密成功;

下面我们就来学习一下C#里如何利用AES加密解密

其实AES加解密的代码大都一致,可以从网上复制过来直接调用的

1.创建一个web窗体Form1.cs来测试

如:

后台代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Security.Cryptography;//记得要引入该类库
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AES加密解密
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        /// <summary>  

        /// AES加密  

        /// </summary>  

        /// <param name="encryptStr">明文</param>  

        /// <param name="key">密钥</param>  

        /// <returns></returns>  

        public static string Encrypt(string encryptStr, string key)

        {

            byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);

            byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(encryptStr);


            RijndaelManaged rDel = new RijndaelManaged();

            rDel.Key = keyArray;

            rDel.Mode = CipherMode.ECB;

            rDel.Padding = PaddingMode.PKCS7;


            ICryptoTransform cTransform = rDel.CreateEncryptor();

            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);


            return Convert.ToBase64String(resultArray, 0, resultArray.Length);

        }//ToBase64String的秘钥为32位

        /// <summary>  

        /// AES解密  

        /// </summary>  

        /// <param name="decryptStr">密文</param>  

        /// <param name="key">密钥</param>  

        /// <returns></returns>  

        internal static string Decrypt(string decryptStr, string key)

        {

            byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);

            byte[] toEncryptArray = Convert.FromBase64String(decryptStr);


            RijndaelManaged rDel = new RijndaelManaged();

            rDel.Key = keyArray;

            rDel.Mode = CipherMode.ECB;

            rDel.Padding = PaddingMode.PKCS7;


            ICryptoTransform cTransform = rDel.CreateDecryptor();

            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);


            return UTF8Encoding.UTF8.GetString(resultArray);

        }

       
        private void button1_Click(object sender, EventArgs e)
        {//加密
            richTextBox1.Text =Encrypt(textBox1.Text,"12345678901234567890123456789012");//AES256加密要32位键值
        }//秘钥位数不对也不能加解密成功

        private void button2_Click(object sender, EventArgs e)
        {//解密
            richTextBox2.Text = Decrypt(richTextBox1.Text, "12345678901234567890123456789012");//(密文,秘钥)
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

2.运行结果

3.当你把解密后的字符串拿到网上在线解密时,诶呀,不一样

加密在一定程度上保证了你数据的安全

加密有对称加密和不对称加密,对称加密一般有两个秘钥,一个为公钥就是大家都知道的,一个为私钥只有自己知道。

猜你喜欢

转载自www.cnblogs.com/kalezhangtao/p/9085308.html