必须引入: 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));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架