C#AES加密加密

平常都用MD5,但是这个MD5解密不了,现在用AES代替,代码如下 

加密方法

 /// <summary>
 /// AES加密
 /// </summary>
 /// <param name="plaintext">加密的文本</param>
 /// <param name="key">加密Key</param>
 /// <param name="iv">加密IV</param>
 /// <returns></returns>
 public static byte[] Encrypt(string plaintext, byte[] key, byte[] iv)
 {
     using (var aes = Aes.Create())
     {
         aes.Key = key;
         aes.IV = iv;
         aes.Mode = CipherMode.CBC;
         aes.Padding = PaddingMode.PKCS7;

         using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
         using (var ms = new MemoryStream())
         using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
         {
             byte[] plaintextBytes = Encoding.UTF8.GetBytes(plaintext);
             cs.Write(plaintextBytes, 0, plaintextBytes.Length);
             cs.FlushFinalBlock();
             return ms.ToArray();
         }
     }
 }

解密方法

  /// <summary>
  /// AES解密
  /// </summary>
  /// <param name="ciphertext">加密后的数据</param>
  /// <param name="key">加密的Key</param>
  /// <param name="iv">加密的IV</param>
  /// <returns></returns>
  public static string Decrypt(byte[] ciphertext, byte[] key, byte[] iv)
  {
      using (var aes = Aes.Create())
      {
          aes.Key = key;
          aes.IV = iv;
          aes.Mode = CipherMode.CBC;
          aes.Padding = PaddingMode.PKCS7;

          using (var decryptor = aes.CreateDecryptor(aes.Key, aes.IV))
          using (var ms = new MemoryStream(ciphertext))
          using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
          using (var reader = new StreamReader(cs, Encoding.UTF8))
          {
              return reader.ReadToEnd(); // 读取解密后数据
          }
      }
  }

 加密方法使用

把要加密的数据key和iv传入

  string jmtext = "我是被加密的数据";
  byte[] key = Encoding.UTF8.GetBytes("1231231231111111"); // AES 密钥,长度必须是 16 字节(128 位)
  byte[] iv = Encoding.UTF8.GetBytes("1511151515111511");  // AES 初始化向量(IV),长度必须是 16 字节
  if (key.Length != 16 || key.Length != 24 || key.Length != 32)
  {
      Console.WriteLine("Key 长度错误,必须是 16, 24, 32 字节");
      return;
  }
  
  if (iv.Length != 16)
  {
      Console.WriteLine("IV 长度错误,必须是 16 字节");
      return;
  }
  byte[] encrypted = AES.Encrypt(jmtext, key, iv);//加密的数据

解密方法使用

就是把加密的数据key和iv传入即可,加密的key和iv必须和解密的key和iv一样

 byte[] key = Encoding.UTF8.GetBytes("1231231231111111"); // AES 密钥,长度必须是 16 字节(128 位)
 byte[] iv = Encoding.UTF8.GetBytes("1511151515111511");  // AES 初始化向量(IV),长度必须是 16 字节
 byte[] encrypted = AES.Encrypt(jmtext, key, iv);//加密的数据
 string text = AES.Decrypt(encrypted, key, iv);//解密出来的数据,就是("我是被加密的数据")

注意事项!!!

key必须为16,24,32字节,iv必须16字节,字节是啥可以自己去搜搜

例子:

字母  1字节

数字   1字节

中文    3字节

还是用数字和英语混搭好点,中文就别用了哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值