<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .net 中的AES加密解密

      一般我使用的第一種,使用32位Key加密的算法,代碼如下

        "AesKey": "asfo44beh9zmeoivlkcmljfoacjfojsd"
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Security.Cryptography;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace Ocelot
      {
          public class AesHelper
          {
              /// <summary>
              ///  AES 加密
              /// </summary>
              /// <param name="str">明文(待加密)</param>
              /// <param name="key">密文(一般用32位字符就可以了,位數(shù)不對會報錯)</param>
              /// <returns></returns>
              public static string AesEncrypt(string str, string key)
              {
                  try
                  {
                      if (string.IsNullOrEmpty(str)) return null;
                      Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
      
                      RijndaelManaged rm = new RijndaelManaged
                      {
                          Key = Encoding.UTF8.GetBytes(key),
                          Mode = CipherMode.ECB,
                          Padding = PaddingMode.PKCS7
                      };
      
                      ICryptoTransform cTransform = rm.CreateEncryptor();
                      Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
                      return Convert.ToBase64String(resultArray);
                  }
                  catch(Exception ex)
                  {
                      return null;
                  }
              }
      
              /// <summary>
              ///  AES 解密
              /// </summary>
              /// <param name="str">明文(待解密)</param>
              /// <param name="key">密文(一般用32位字符就可以了,位數(shù)不對會報錯)</param>
              /// <returns></returns>
              public static string AesDecrypt(string str, string key)
              {
                  try
                  {
                      if (string.IsNullOrEmpty(str)) return null;
                      str = str.Replace(" ", "+");
                      Byte[] toEncryptArray = Convert.FromBase64String(str);
      
                      RijndaelManaged rm = new RijndaelManaged
                      {
                          Key = Encoding.UTF8.GetBytes(key),
                          Mode = CipherMode.ECB,
                          Padding = PaddingMode.PKCS7
                      };
      
                      ICryptoTransform cTransform = rm.CreateDecryptor();
                      Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
      
                      return Encoding.UTF8.GetString(resultArray);
                  }
                  catch 
                  {
                      return "";
                  }
              }
          }
      }

       

      下面還有兩種

      AES加密中向量長度是16個byte

      密鑰長度有三種:16,24,32   單位byte

      AES的區(qū)塊長度固定為128比特,密鑰長度則可以是128(6byte*8b),192(24*8)或256(32*8)比特;

      加密后的輸出要轉(zhuǎn)為base64 ,為什么呢?因為base64所有字符都是可打印,加密后的字符轉(zhuǎn)為base64才能被人看見,在復制時候不容易漏掉

       

      在C#中AES加密解密寫法有:

       

      using System.Security.Cryptography;
      using System.Text.RegularExpressions;

      /// <summary>
              /// AES解密
              /// </summary>
              /// <param name="decryptString">AES密文</param>
              /// <param name="key">秘鑰(44個字符)</param>
              /// <param name="ivString">向量(16個字符)</param>
              /// <returns></returns>
              public static string AES_Decrypt(string decryptString, string key, string ivString)
              {
                  try
                  {
      
                      key = key.PadRight(32, ' ');
                      RijndaelManaged aes = new RijndaelManaged();
      
                      byte[] iv = Encoding.UTF8.GetBytes(ivString.Substring(0,16));
                      aes.Key = Encoding.UTF8.GetBytes(key.Substring(0, 32));
                      aes.Mode = CipherMode.ECB;
                      aes.IV = iv;
                      aes.Padding = PaddingMode.PKCS7;  //
                      
      
                      ICryptoTransform rijndaelDecrypt = aes.CreateDecryptor();
                      byte[] inputData = Convert.FromBase64String(decryptString);
                      byte[] xBuff = rijndaelDecrypt.TransformFinalBlock(inputData, 0, inputData.Length);
      
                      return Encoding.UTF8.GetString(xBuff);
                  }
                  catch (Exception ex)
                  {
                      throw;
      
                  }
              }
      
      
      
              /// <summary>
              /// 加密
              /// </summary>
              /// <param name="encriyptString">要被加密的字符串</param>
              /// <param name="key">秘鑰(44個字符)</param>
              /// <param name="ivString">向量長度(16個字符)</param>
              /// <returns></returns>
              public static string AES_Encrypt(string encriyptString, string key, string ivString)
              {
                  key = key.PadRight(32, ' ');
                  SymmetricAlgorithm aes = new RijndaelManaged();
      
                  byte[] iv = Encoding.UTF8.GetBytes(ivString.Substring(0,16));
                  
      
                  aes.Key = Encoding.UTF8.GetBytes(key.Substring(0, 32));
                  aes.Mode = CipherMode.ECB;
                  aes.IV = iv;
                  aes.Padding = PaddingMode.PKCS7; //
                  
      
                   ICryptoTransform rijndaelEncrypt = aes.CreateEncryptor();
                  byte[] inputData = Encoding.UTF8.GetBytes(encriyptString);
                  byte[] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData, 0, inputData.Length);
                  
                  return Convert.ToBase64String(encryptedData);
              }
              #endregion
      
          }

       填充(Padding)和運算模式(Mode)也可以自定義,不同的值有不同的結(jié)果

       

      下面是另一種寫法

      /// <summary>
              /// AES加密算法
              /// </summary>
              /// <param name="plainText">明文字符串</param>
              /// <param name="strKey">密鑰</param>
              /// <returns>返回加密后的密文字節(jié)數(shù)組</returns>
              public static byte[] AESEncrypt(string plainText, string strKey)
              {
                  //分組加密算法
                  SymmetricAlgorithm des = Rijndael.Create();
                  byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字節(jié)數(shù)組
                                                                            //設置密鑰及密鑰向量
                  des.Key = Encoding.UTF8.GetBytes(strKey);
                  des.IV = _key1;
                  MemoryStream ms = new MemoryStream();
                  CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                  cs.Write(inputByteArray, 0, inputByteArray.Length);
                  cs.FlushFinalBlock();
                  byte[] cipherBytes = ms.ToArray();//得到加密后的字節(jié)數(shù)組
                  cs.Close();
                  ms.Close();
                  return cipherBytes;
              }
      
              /// <summary>
              /// AES解密
              /// </summary>
              /// <param name="cipherText">密文字節(jié)數(shù)組</param>
              /// <param name="strKey">密鑰</param>
              /// <returns>返回解密后的字符串</returns>
              public static byte[] AESDecrypt(byte[] cipherText, string strKey)
              {
                  SymmetricAlgorithm des = Rijndael.Create();
                  des.Key = Encoding.UTF8.GetBytes(strKey);
                  des.IV = _key1;
                  byte[] decryptBytes = new byte[cipherText.Length];
                  MemoryStream ms = new MemoryStream(cipherText);
                  CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read);
                  cs.Read(decryptBytes, 0, decryptBytes.Length);
                  cs.Close();
                  ms.Close();
                  return decryptBytes;
              }

      在和不同語言做解密解密對接的時間要注意對方使用的編碼格式、填充模式和運算模式,這幾點都是容易被忽略的,尤其是編碼格式。稍不注意就進坑了

      博文來自:http://www.rzrgm.cn/netqq/articles/9655115.html

      posted @ 2021-03-05 16:39  酒沉吟  閱讀(4018)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久精品A一国产成人免费网站| 国产免费午夜福利蜜芽无码| 无码吃奶揉捏奶头高潮视频| 男女猛烈激情xx00免费视频| 人妻激情偷乱一区二区三区 | 国色天香中文字幕在线视频 | 亚洲欧洲精品日韩av| 99久久婷婷国产综合精品青草漫画 | 亚洲人成网站18禁止无码| 日本边添边摸边做边爱的网站| 国产精品伦人一久二久三久| 欧美丰满熟妇xxxx性| 亚洲日韩日本中文在线| 亚洲精品国产无套在线观| 亚洲精品天堂一区二区| 黑人巨茎大战白人美女| 成人午夜污一区二区三区| 日韩免费码中文在线观看| 性欧美三级在线观看| 亚洲精品97久久中文字幕无码| 午夜通通国产精品福利| 一本色道久久综合熟妇人妻| 国产 精品 自在 线免费| 久久亚洲精品成人综合网| 中文字幕免费不卡二区| 国产欧美日韩精品丝袜高跟鞋| 文中字幕一区二区三区视频播放| 国产91成人亚洲综合在线| 国产乱码1卡二卡3卡四卡5| 无遮无挡爽爽免费视频| 亚洲国产成人久久77| 极品一区二区三区水蜜桃| 国产精品天天看天天狠| 精品久久人人妻人人做精品| 国产目拍亚洲精品区一区| 江门市| 亚洲中文字幕久久精品品| 欧美人与性动交ccoo| 亚洲av无码国产在丝袜线观看| 亚洲AV永久无码精品秋霞电影影院 | 国内外成人综合免费视频|