必须引入: using System.Security.Cryptography;
AES 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。
AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。
下面直接进入代码中(解密同理为你过程,但请注意因为aes是块加密,所以在解密出块前要把最后的\0清除,可以记录加密时的长度来解密)
protected void btEncrypt_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtInput.Text)) { txtInputLength.Text = string.Empty; AesManaged aesm = new AesManaged(); txtKey.Text = string.Empty; foreach (byte b in aesm.Key) { txtKey.Text += string.Format("{0}\t", b.ToString()); } txtKey.Text += string.Format("Length:{0}", aesm.Key.Length); txtVI.Text = string.Empty; foreach (byte b in aesm.IV) { txtVI.Text += string.Format("{0}\t", b.ToString()); } txtVI.Text += string.Format("Length:{0}", aesm.IV.Length); byte[] plainTextBytes = Encoding.Unicode.GetBytes(txtInput.Text); txtInputLength.Text = plainTextBytes.Length.ToString(); byte[] encyptedBytes; encyptedBytes = aesm.CreateEncryptor().TransformFinalBlock(plainTextBytes, 0, plainTextBytes.Length); txtEncrypted.Text = string.Empty; foreach (byte b in encyptedBytes) { txtEncrypted.Text += string.Format("{0}\t", b.ToString()); } txtEncrypted.Text += string.Format("Length:{0}", encyptedBytes.Length); } }
encyptedBytes = aesm.CreateDecryptor().TransformFinalBlock(encyptedBytes, 0, encyptedBytes .Length); Array.Copy(encyptedBytes, 0, plainTextBytes, 0, plainTextBytes.Length); Response.Write(Encoding.Unicode.GetString(plainTextBytes));