使用C#实现AES加密解密

AES算法描述简介:

    DES 数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准, 即AES。经过三轮的筛选,比利时Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。尽管人们对AES还有不 同的看法,但总体来说,AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES设计有三个密钥长 度:128,192,256位,相对而言,AES的128密钥比DES的56密钥强1021倍。

/// <summary>
 /// AES加密
 /// </summary>
 /// <param name="Data">被加密的明文</param>
 /// <param name="Key">密钥</param>
 /// <param name="Vector">向量</param>
 /// <returns>密文</returns>
 public static Byte[] AESEncrypt(Byte[] Data, String Key, String Vector)
 {
 Byte[] bKey = new Byte[32];
 Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
 Byte[] bVector = new Byte[16];
 Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

 Byte[] Cryptograph = null; // 加密后的密文

 Rijndael Aes = Rijndael.Create();
 try
 {
 // 开辟一块内存流
 using (MemoryStream Memory = new MemoryStream())
 {
 // 把内存流对象包装成加密流对象
 using (CryptoStream Encryptor = new CryptoStream(Memory,
 Aes.CreateEncryptor(bKey, bVector),
 CryptoStreamMode.Write))
 {
 // 明文数据写入加密流
 Encryptor.Write(Data, 0, Data.Length);
 Encryptor.FlushFinalBlock();

 Cryptograph = Memory.ToArray();
 }
 }
 }
 catch
 {
 Cryptograph = null;
 }

 return Cryptograph;
 }

 /// <summary>
 /// AES解密
 /// </summary>
 /// <param name="Data">被解密的密文</param>
 /// <param name="Key">密钥</param>
 /// <param name="Vector">向量</param>
 /// <returns>明文</returns>
 public static Byte[] AESDecrypt(Byte[] Data, String Key, String Vector)
 {
 Byte[] bKey = new Byte[32];
 Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
 Byte[] bVector = new Byte[16];
 Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

 Byte[] original = null; // 解密后的明文

 Rijndael Aes = Rijndael.Create();
 try
 {
 // 开辟一块内存流,存储密文
 using (MemoryStream Memory = new MemoryStream(Data))
 {
 // 把内存流对象包装成加密流对象
 using (CryptoStream Decryptor = new CryptoStream(Memory,
 Aes.CreateDecryptor(bKey, bVector),
 CryptoStreamMode.Read))
 {
 // 明文存储区
 using (MemoryStream originalMemory = new MemoryStream())
 {
 Byte[] Buffer = new Byte[1024];
 Int32 readBytes = 0;
 while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
 {
 originalMemory.Write(Buffer, 0, readBytes);
 }

 original = originalMemory.ToArray();
 }
 }
 }
 }
 catch
 {
 original = null;
 }

 return original;
 }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值