• [C#]AES加密算法实现


          密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

    (以上来自百度)

    c#aes算法实现的辅助类

      1     public static class AesSecret
      2     {
      3         #region 秘钥对
      4 
      5         private const string saltString = "Wolfy@home";
      6         private const string pWDString = "home@Wolfy";
      7 
      8         #endregion
      9 
     10         #region 加/解密算法
     11 
     12         /// <summary>
     13         /// 解密
     14         /// </summary>
     15         /// <param name="sSource">需要解密的内容</param>
     16         /// <returns></returns>
     17         public static byte[] DecryptString(string strSource)
     18         {
     19             byte[] encryptBytes = Convert.FromBase64String(strSource);
     20             byte[] salt = Encoding.UTF8.GetBytes(saltString);
     21             //提供高级加密标准 (AES) 对称算法的托管实现。
     22             AesManaged aes = new AesManaged();
     23             //通过使用基于 System.Security.Cryptography.HMACSHA1 的伪随机数生成器,实现基于密码的密钥派生功能 (PBKDF2)。
     24             Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(pWDString, salt);
     25             // 获取或设置加密操作的块大小(以位为单位)。
     26             aes.BlockSize = aes.LegalBlockSizes[0].MaxSize;
     27             //获取或设置用于对称算法的密钥大小(以位为单位)。
     28             aes.KeySize = aes.LegalKeySizes[0].MaxSize;
     29             //获取或设置用于对称算法的密钥。
     30             aes.Key = rfc.GetBytes(aes.KeySize / 8);
     31             //获取或设置用于对称算法的初始化向量 (IV)。
     32             aes.IV = rfc.GetBytes(aes.BlockSize / 8);
     33 
     34             // 用当前的 Key 属性和初始化向量 IV 创建对称解密器对象
     35             System.Security.Cryptography.ICryptoTransform decryptTransform = aes.CreateDecryptor();
     36 
     37             // 解密后的输出流
     38             MemoryStream decryptStream = new MemoryStream();
     39 
     40             // 将解密后的目标流(decryptStream)与解密转换(decryptTransform)相连接
     41             CryptoStream decryptor = new CryptoStream(
     42                 decryptStream, decryptTransform, CryptoStreamMode.Write);
     43 
     44             // 将一个字节序列写入当前 CryptoStream (完成解密的过程)
     45             decryptor.Write(encryptBytes, 0, encryptBytes.Length);
     46             decryptor.Close();
     47 
     48             // 将解密后所得到的流转换为字符串
     49             return decryptStream.ToArray();
     50 
     51         }
     52 
     53         /// <summary>
     54         /// 加密
     55         /// </summary>
     56         /// <param name="sSource">需要加密的内容</param>
     57         /// <returns></returns>
     58         public static byte[] EncryptString(string strSource)
     59         {
     60             byte[] data = UTF8Encoding.UTF8.GetBytes(strSource);
     61             byte[] salt = UTF8Encoding.UTF8.GetBytes(saltString);
     62 
     63             // AesManaged - 高级加密标准(AES) 对称算法的管理类
     64             AesManaged aes = new AesManaged();
     65 
     66             // Rfc2898DeriveBytes - 通过使用基于 HMACSHA1 的伪随机数生成器,实现基于密码的密钥派生功能 (PBKDF2 - 一种基于密码的密钥派生函数)
     67             // 通过 密码 和 salt 派生密钥
     68             Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(pWDString, salt);
     69 
     70             /*
     71             * AesManaged.BlockSize - 加密操作的块大小(单位:bit)
     72             * AesManaged.LegalBlockSizes - 对称算法支持的块大小(单位:bit)
     73             * AesManaged.KeySize - 对称算法的密钥大小(单位:bit)
     74             * AesManaged.LegalKeySizes - 对称算法支持的密钥大小(单位:bit)
     75             * AesManaged.Key - 对称算法的密钥
     76             * AesManaged.IV - 对称算法的密钥大小
     77             * Rfc2898DeriveBytes.GetBytes(int 需要生成的伪随机密钥字节数) - 生成密钥
     78             */
     79 
     80             aes.BlockSize = aes.LegalBlockSizes[0].MaxSize;
     81             aes.KeySize = aes.LegalKeySizes[0].MaxSize;
     82             aes.Key = rfc.GetBytes(aes.KeySize / 8);
     83             aes.IV = rfc.GetBytes(aes.BlockSize / 8);
     84 
     85             // 用当前的 Key 属性和初始化向量 IV 创建对称加密器对象
     86             ICryptoTransform encryptTransform = aes.CreateEncryptor();
     87 
     88             // 加密后的输出流
     89             MemoryStream encryptStream = new MemoryStream();
     90 
     91             // 将加密后的目标流(encryptStream)与加密转换(encryptTransform)相连接
     92             CryptoStream encryptor = new CryptoStream
     93                 (encryptStream, encryptTransform, CryptoStreamMode.Write);
     94 
     95             // 将一个字节序列写入当前 CryptoStream (完成加密的过程)
     96             encryptor.Write(data, 0, data.Length);
     97             encryptor.Close();
     98 
     99             return encryptStream.ToArray();
    100         }
    101 
    102         #endregion
    103     }

    可以和序列化配合使用。

  • 相关阅读:
    ASP.NET学习笔记(1)
    vs2005新建项目中没有ASP.NET WEB应用程序
    IE无法安装Activex控件
    【Android】SDK工具学习
    【英语】Bingo口语笔记(22)
    【Python】实践笔记
    【学习】纪录片笔记
    【英语】Bingo口语笔记(20)
    【英文】20141027 生词
    【英文】Bingo口语笔记(18)
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/3380453.html
Copyright © 2020-2023  润新知