# AesEncrypt **Repository Path**: dongrizhixue/AesEncrypt ## Basic Information - **Project Name**: AesEncrypt - **Description**: Aes加密/解密类 - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: gxr/1.0.0.0 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 50 - **Forks**: 9 - **Created**: 2016-08-04 - **Last Updated**: 2024-06-14 ## Categories & Tags **Categories**: security-dev **Tags**: None ## README #AesEncrypt:Aes加密/解密示例项目
  附件中的“AesEncrypt.zip”是本项目的exe文件,可直接下载下来运行和查看。   *高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。*
  好的百科已普及,现在来看看这Aes怎么使用,由于需要把加密后的byte[]输出成字符串,但是普通字符串无法兼容,所以这里使用的base64字符串。详见代码AesEncrypt\AesEncrypt.cs。
  为了直观的看到Aes的加解密过程,现在给出几个示例,如下图
  1.在“未加密”的文本框中输入一个普通的字符串,点击“加密”按钮,将在”已加密“的文本框中得到一个Aes加密后的base64字符串。**这个“已加密”的base64字符串就可以放到系统中使用了,例如可以填到数据库链接字符串,也可以存储得到数据中。**
  2.第一步完成后,“已加密”文本框中已经被填写了Aes加密后的base64字符串,为了看到效果,可以把“未加密”文本框中的普通文本删掉,然后点击“解密”按钮,就可以在“未加密”文本框中看到之前的普通文本。
  3.经过以上两步操作,我想这个窗体已经完成了示例的作用,Aes加密需要两个byte[],一个是IV,它是对称算法的初始化向量,一个是Key,它是对称算法的密钥。IV是一个Length=16的byte[],Key是一个Length=32的byte[],**因此可以在AesEncrypt\AesEncrypt.cs类中设置自己的固定密钥用以在程序中加密/解密,如以下代码中所示,可以填写任意的数字,来当做密钥。**
```C# /// /// 对称算法的密钥 /// private readonly static byte[] aesKey = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }; /// /// 对称算法的初始化向量 /// private readonly static byte[] aesIV = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; ``` ![基础示例窗体](http://git.oschina.net/uploads/images/2016/0804/162014_5190b387_88875.png "基础示例窗体")

  以上步骤是在程序中的基本使用方式,Aes还可以有更多的用途,以下来个抛砖引玉。
  1.在“玩玩解密”窗体中点击“发送”按钮之后,将把“未加密”中的文本使用Aes加密后转换成base64字符串填写到“已加密”文本框中,同时将利用以下代码将Aes类可随机生成的IV和Key(注意IV和Key都是byte[]),转换为base64后分别填写到“向量(IV)”和“密钥(Key)”中。
```C# private void button1_Click(object sender, EventArgs e) { using (Aes myAes = Aes.Create()) { AesEncryptExtension aes = new AesEncryptExtension(); textBox2.Text = aes.Encrypt(textBox1.Text, myAes.Key, myAes.IV); textBox3.Text = Convert.ToBase64String(myAes.IV); textBox4.Text = Convert.ToBase64String(myAes.Key); } Form3 form = new Form3(); form.Show(); } ``` ![玩玩解密](http://git.oschina.net/uploads/images/2016/0804/164649_7823ac80_88875.png "玩玩解密")
  2.第一步完成后,同时会弹出“接收密文”窗体,如下图。将“玩玩解密”窗体中的“已加密”、“向量(IV)”和“密钥(key)”填写到“接收密文”窗体对应文本框中,将获取到未加密的普通文本。
![接收密文](http://git.oschina.net/uploads/images/2016/0804/165536_7ace5902_88875.png "接收密文")
  3.以上所示,是手动填写密文、IV和key来获取内容。当然你也可以自动传过去,只要两个系统的iv和key相同就可以实现解密,前提是两个系统中的动态密钥规律要相同,说到这里我想聪明的你应该已经知道Aes加密怎么玩了,好好想想,可以有多种应用。
  举个例子,图例解释,IV和key合称为钥匙,IV和Key生成算法称为钥匙机,每一把被生产出来的钥匙都刻着钥匙编号,Aes本身称为保险柜,被加密内容则会被放进“保险柜”。两方同时使用钥匙机生产钥匙,每一把钥匙都刻着钥匙编号,运输的时候只运输保险柜和钥匙编号,接收到保险柜的一方,用钥匙编号从钥匙机中拿钥匙打开保险柜,取得加密内容。以上例可称为一个较为简单的Aes应用方式。