[C#] AES加密解密 →→→→→进入此内容的聊天室

来自 , 2021-02-14, 写在 C#, 查看 145 次.
URL http://www.code666.cn/view/110eec23
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Security.Cryptography;
  6. using System.Text;
  7.  
  8. /// <summary>
  9.         /// 有密码的AES加密
  10.         /// </summary>
  11.         /// <param name="text">加密字符</param>
  12.         /// <param name="password">加密的密码</param>
  13.         /// <param name="iv">密钥</param>
  14.         /// <returns></returns>
  15.         public static string AESEncrypt(string text, string password, string iv)
  16.         {
  17.             RijndaelManaged rijndaelCipher = new RijndaelManaged();
  18.  
  19.             rijndaelCipher.Mode = CipherMode.CBC;
  20.  
  21.             rijndaelCipher.Padding = PaddingMode.PKCS7;
  22.  
  23.             rijndaelCipher.KeySize = 128;
  24.  
  25.             rijndaelCipher.BlockSize = 128;
  26.  
  27.             byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);
  28.  
  29.             byte[] keyBytes = new byte[16];
  30.  
  31.             int len = pwdBytes.Length;
  32.  
  33.             if (len > keyBytes.Length) len = keyBytes.Length;
  34.  
  35.             System.Array.Copy(pwdBytes, keyBytes, len);
  36.  
  37.             rijndaelCipher.Key = keyBytes;
  38.  
  39.  
  40.             byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);
  41.             rijndaelCipher.IV = ivBytes;
  42.  
  43.             ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
  44.  
  45.             byte[] plainText = Encoding.UTF8.GetBytes(text);
  46.  
  47.             byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);
  48.  
  49.             return Convert.ToBase64String(cipherBytes);
  50.  
  51.         }
  52.  
  53.         /// <summary>
  54.         /// 随机生成密钥
  55.         /// </summary>
  56.         /// <returns></returns>
  57.         public static string GetIv(int n)
  58.         {
  59.             char[] arrChar = new char[]{
  60.            'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x',
  61.            '0','1','2','3','4','5','6','7','8','9',
  62.            'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z'
  63.           };
  64.  
  65.             StringBuilder num = new StringBuilder();
  66.  
  67.             Random rnd = new Random(DateTime.Now.Millisecond);
  68.             for (int i = 0; i < n; i++)
  69.             {
  70.                 num.Append(arrChar[rnd.Next(0, arrChar.Length)].ToString());
  71.             }
  72.  
  73.             return num.ToString();
  74.         }
  75.  
  76.         /// <summary>
  77.         /// AES解密
  78.         /// </summary>
  79.         /// <param name="text"></param>
  80.         /// <param name="password"></param>
  81.         /// <param name="iv"></param>
  82.         /// <returns></returns>
  83.         public static string AESDecrypt(string text, string password, string iv)
  84.         {
  85.             RijndaelManaged rijndaelCipher = new RijndaelManaged();
  86.  
  87.             rijndaelCipher.Mode = CipherMode.CBC;
  88.  
  89.             rijndaelCipher.Padding = PaddingMode.PKCS7;
  90.  
  91.             rijndaelCipher.KeySize = 128;
  92.  
  93.             rijndaelCipher.BlockSize = 128;
  94.  
  95.             byte[] encryptedData = Convert.FromBase64String(text);
  96.  
  97.             byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);
  98.  
  99.             byte[] keyBytes = new byte[16];
  100.  
  101.             int len = pwdBytes.Length;
  102.  
  103.             if (len > keyBytes.Length) len = keyBytes.Length;
  104.  
  105.             System.Array.Copy(pwdBytes, keyBytes, len);
  106.  
  107.             rijndaelCipher.Key = keyBytes;
  108.  
  109.             byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);
  110.             rijndaelCipher.IV = ivBytes;
  111.  
  112.             ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
  113.  
  114.             byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
  115.  
  116.             return Encoding.UTF8.GetString(plainText);
  117.  
  118.         }

回复 "AES加密解密"

这儿你可以回复上面这条便签

captcha