[C#]AES加密算法实现

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

《[C#]AES加密算法实现》

(以上来自百度)

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     }

可以和序列化配合使用。

    原文作者:wolfy
    原文地址: https://www.cnblogs.com/wolf-sun/p/3380453.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞