• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#实现AES加密解密

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

 

AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法

Rijndael(读作rain-dahl)是由美国国家标准与技术协会(NIST)所选的高级加密标准(AES)的候选算法。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。


Rijndael 算法首先是一个密钥分组加密的算法,通过置换(permutations )和替换(substitutions)迭代加密,进过多轮操作形成密文。


AES算是Rijndael算法的一种特殊实现,选的分组为128bit(16字节),密钥可以使用128、192 和 256bit三种,而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。加密过程中使用的密钥是由Rijndael密钥生成方案产生。


AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“状态(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支持更大的区块,其矩阵行数可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:
AddRoundKey — 矩阵中的每一个字节都与该次轮秘钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。
SubBytes — 通过非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
ShiftRows — 将矩阵中的每个横列进行循环式移位。
MixColumns — 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每列的四个字节。

 

 

RijndaelManager代码实现

 

 

  1.  
    using System;
  2.  
    using System.Collections.Generic;
  3.  
    using System.Text;
  4.  
    using System.Security.Cryptography;
  5.  
    using System.IO;
  6.  
     
  7.  
    namespace Csharp
  8.  
    {
  9.  
    class AESHelper
  10.  
    {
  11.  
    /// <summary>
  12.  
    /// AES加密
  13.  
    /// </summary>
  14.  
    /// <param name="Data">被加密的明文</param>
  15.  
    /// <param name="Key">密钥</param>
  16.  
    /// <param name="Vector">向量</param>
  17.  
    /// <returns>密文</returns>
  18.  
    public static String AESEncrypt(String Data, String Key, String Vector)
  19.  
    {
  20.  
    Byte[] plainBytes = Encoding.UTF8.GetBytes(Data);
  21.  
     
  22.  
    Byte[] bKey = new Byte[32];
  23.  
    Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
  24.  
    Byte[] bVector = new Byte[16];
  25.  
    Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
  26.  
     
  27.  
    Byte[] Cryptograph = null; // 加密后的密文
  28.  
     
  29.  
    Rijndael Aes = Rijndael.Create();
  30.  
    try
  31.  
    {
  32.  
    // 开辟一块内存流
  33.  
    using (MemoryStream Memory = new MemoryStream())
  34.  
    {
  35.  
    // 把内存流对象包装成加密流对象
  36.  
    using (CryptoStream Encryptor = new CryptoStream(Memory,
  37.  
    Aes.CreateEncryptor(bKey, bVector),
  38.  
    CryptoStreamMode.Write))
  39.  
    {
  40.  
    // 明文数据写入加密流
  41.  
    Encryptor.Write(plainBytes, 0, plainBytes.Length);
  42.  
    Encryptor.FlushFinalBlock();
  43. 该文章已有0人参与评论

    请发表评论

    全部评论

    专题导读
    上一篇:
    vim阅读c++代码的快捷键发布时间:2022-07-13
    下一篇:
    C#中关于常用日期的计算发布时间:2022-07-13
    热门推荐
    阅读排行榜

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap