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

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

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

      AES加密

      在數(shù)字化時代,數(shù)據(jù)安全成為了企業(yè)和個人關注的焦點。AES(高級加密標準)作為一種廣泛采用的對稱加密算法,因其高效性和安全性,在保護敏感信息方面發(fā)揮著重要作用。本文將深入探討AES加密的工作原理、優(yōu)勢、實現(xiàn)方法以及在實際應用中的注意事項。

      一、AES加密簡介
      1.1 AES的歷史與發(fā)展
      AES算法由比利時密碼學家Vincent Rijmen和Joan Daemen于1997年提出,并于2001年被美國國家標準與技術研究院(NIST)選為新的數(shù)據(jù)加密標準。AES取代了原有的DES(數(shù)據(jù)加密標準),提供了更強的安全性和更高的性能。

      1.2 AES的工作原理
      AES是一種基于替換-置換網(wǎng)絡(SPN)的加密算法,它使用相同的密鑰進行加密和解密。AES加密過程包括多個輪次,每一輪都包括以下四個步驟:字節(jié)替換(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和輪密鑰加(AddRoundKey)。解密過程與加密過程類似,但順序相反。

      二、AES加密的優(yōu)勢
      2.1 高效性
      AES算法在硬件和軟件上都能高效運行,這使得它適用于各種計算環(huán)境,從高性能服務器到嵌入式設備。

      2.2 安全性
      AES提供了強大的安全性,即使在面對量子計算的威脅時,AES-256位版本仍然被認為是安全的。

      2.3 靈活性
      AES支持128位、192位和256位密鑰長度,用戶可以根據(jù)安全需求選擇合適的密鑰長度。

      三、AES加密的實現(xiàn)
      3.1 編程語言支持
      大多數(shù)現(xiàn)代編程語言都提供了AES加密的庫或內(nèi)置支持。例如,Python的cryptography庫、Java的javax.crypto包和C#的System.Security.Cryptography命名空間。

      3.2 實現(xiàn)步驟
      ------------------------這個方法是對key字節(jié)的處理(確保最終返回的密鑰字節(jié)數(shù)組長度為 16,符合 AES-128 位密鑰的長度要求)----------------------------
      ///


      /// 128位處理key
      ///

      /// 原字節(jié)
      /// 處理key
      ///
      private static byte[] GetAesKey(byte[] keyArray, string key)
      {
      byte[] newArray = new byte[16];
      重點:如果輸入的密鑰字節(jié)數(shù)組長度小于 16,則進入下面的循環(huán)進行填充操作。也可以不必須是16位的長度,不夠的話會自動給你補充=號,一個=是兩個字節(jié)長度
      if (keyArray.Length < 16)
      {
      for (int i = 0; i < newArray.Length; i++)
      {
      if (i >= keyArray.Length)
      {
      newArray[i] = 0;
      }
      else
      {
      newArray[i] = keyArray[i];
      }
      }
      }
      無論輸入密鑰字節(jié)數(shù)組的長度如何,最終都會返回一個長度為 16 的字節(jié)數(shù)組,作為處理后的 AES-128 位密鑰。
      return newArray;
      }

      -------------------------------------------------------------------ASE加密方法-----------------------------------------
      ///


      /// 使用AES加密字符串,按128位處理key
      ///

      /// 加密內(nèi)容
      /// 秘鑰,需要128位、256位.....
      /// Base64字符串結果
      public static string AesEncrypt(string content, string key, bool autoHandle = true)
      {

      把key的通過Encoding.UTF8.值轉(zhuǎn)換為字節(jié)數(shù)組
      
      byte[] keyArray = Encoding.UTF8.GetBytes(key);
      if (autoHandle)
      {
          keyArray = GetAesKey(keyArray, key);
      }
      
       把content的通過Encoding.UTF8.值轉(zhuǎn)換為字節(jié)數(shù)組
      byte[] toEncryptArray = Encoding.UTF8.GetBytes(content);
      
      這一行主要是為了創(chuàng)建一個對稱加密算法對象,使用 Aes.Create() 創(chuàng)建的是 AES 加密算法的具體實現(xiàn)。對稱加密算法使用相同的密鑰進行加密和解密操作。
      SymmetricAlgorithm des = Aes.Create();
      
      將之前處理后的密鑰字節(jié)數(shù)組 keyArray 賦值給加密算法對象的 Key 屬性。這個密鑰將用于加密數(shù)據(jù)。
      des.Key = keyArray;
      
      ECB是一個加密的方式
      des.Mode = CipherMode.ECB;
      
       通過PKCS7進行填充
      des.Padding = PaddingMode.PKCS7;
      
      使用加密算法對象創(chuàng)建一個加密器。這個加密器將用于對數(shù)據(jù)進行加密操作。
      ICryptoTransform cTransform = des.CreateEncryptor();
      byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
      

      返回一個Base64的字符串放到數(shù)據(jù)庫里
      return Convert.ToBase64String(resultArray);
      }

      注意:一般有的人會用加密區(qū)處理自己的登錄注冊方法,可能不知道這里該怎么用,調(diào)用以下是代碼(可以大概屢清一下思路)
      -------------------------------------------------------------------登錄方法-----------------------------------------
      ///


      /// 用戶信息添加方法
      ///

      /// 要添加的用戶信息
      /// 受影響的行數(shù)
      public async Task AddAccountAsync(Account account)
      {
      try
      {
      var accountData = await _accountRepository.GetAsync(p => p.AccountId == account.AccountId && p.AccountTypeId == account.AccountTypeId && !p.IsDeleted);

           if (accountData!=null)
           {
               return -1;
           }
      
           account.IsDeleted = false;
      
           因為上面的方法里有三個參數(shù),第一個是context 在這里放的就是account.AccountPwd,第二個參數(shù)是key 里面放的就是我在這個方法里訂的 var key = "asdasd"
           var key = "asdasd";(再說一遍這個字節(jié)可以不用一定到16個字節(jié),不夠的系統(tǒng)還是會給你補=號,一個=號兩個字節(jié))
           account.AccountPwd = AesEncrypt(account.AccountPwd, key);
           return await _accountRepository.AddAsync(account);
       }
       catch (Exception ex)
       {
           _logger.LogError("添加用戶信息出錯" + ex.Message);
           throw;
       }
      

      }

      登錄方法照舊我就不寫了

      當然有加密方法肯定會有點對應的解密方法

      -------------------------------------------------------------------解密方法-----------------------------------------

      1.1這里返回的是一個 UTF8解密結果
      ///


      /// 使用AES解密字符串,按128位處理key
      ///

      /// 內(nèi)容
      /// 秘鑰,需要128位、256位.....
      /// UTF8解密結果
      public string AesDecrypt(string content, string key, bool autoHandle = true)
      {
      byte[] keyArray = Encoding.UTF8.GetBytes(key);
      if (autoHandle)
      {
      keyArray = GetAesKey(keyArray, key);
      }
      byte[] toEncryptArray = Convert.FromBase64String(content);

              SymmetricAlgorithm des = Aes.Create();
              des.Key = keyArray;
              des.Mode = CipherMode.ECB;
              des.Padding = PaddingMode.PKCS7;
      
              ICryptoTransform cTransform = des.CreateDecryptor();
              byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
      
              return Encoding.UTF8.GetString(resultArray);
          }
      

      直接復制就可以用了 這里的 content 是你數(shù)據(jù)庫里加密之后的密碼,key是你在用戶信息添加方法
      定義的var key="asdasd",autoHandle默認為true就不用管了

      1.2這里返回的是Base64的解密結果

      ///


      /// 使用AES解密字符串,按128位處理key
      ///

      /// 內(nèi)容
      /// 秘鑰,需要128位、256位.....
      /// Base64解密結果
      public string AesDecrypt(string content, string key, bool autoHandle = true)
      {
      byte[] keyArray = Encoding.UTF8.GetBytes(key);
      if (autoHandle)
      {
      keyArray = GetAesKey(keyArray, key);
      }
      byte[] toEncryptArray = Convert.FromBase64String(content);

              SymmetricAlgorithm des = Aes.Create();
              des.Key = keyArray;
              des.Mode = CipherMode.ECB;
              des.Padding = PaddingMode.PKCS7;
      
              ICryptoTransform cTransform = des.CreateDecryptor();
              byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
      
              return Encoding.Base64.GetString(resultArray);
          }
      

      四、AES加密的應用場景
      4.1 數(shù)據(jù)存儲
      在數(shù)據(jù)庫中存儲敏感信息,如用戶密碼、個人信息等。

      4.2 數(shù)據(jù)傳輸
      在網(wǎng)絡傳輸中保護數(shù)據(jù)不被竊聽,如HTTPS協(xié)議中的使用。

      4.3 移動設備
      在智能手機和平板電腦上保護用戶數(shù)據(jù)。

      五、注意事項與最佳實踐
      5.1 密鑰管理
      密鑰管理是加密過程中最重要的部分。應確保密鑰的安全存儲和傳輸,并定期更換密鑰。

      5.2 使用強隨機數(shù)生成器
      在生成密鑰和初始化向量(IV)時,使用強隨機數(shù)生成器以提高安全性。

      5.3 避免實現(xiàn)自己的加密算法
      使用經(jīng)過驗證的庫和算法,避免自行實現(xiàn)加密算法,以減少安全漏洞的風險。

      結語
      AES加密作為一種強大的數(shù)據(jù)保護工具,為現(xiàn)代數(shù)字世界提供了必要的安全保障。通過理解和應用AES加密,我們可以更有效地保護敏感數(shù)據(jù),防止數(shù)據(jù)泄露和未授權訪問。然而,加密只是數(shù)據(jù)安全策略的一部分,結合其他安全措施,如訪問控制、監(jiān)控和審計,可以構建更全面的安全防護體系。

      posted @ 2024-11-21 15:40  奧術  閱讀(776)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩精品 在线 国产 丝袜| 少妇人妻偷人精品系列| 日韩激情无码av一区二区| 久久久国产成人一区二区| 欧美牲交a欧美牲交aⅴ图片 | 悠悠色成人综合在线观看| 中文字幕乱妇无码AV在线| 日韩一区二区黄色一级片| 美女裸体18禁免费网站| 国产亚洲AV电影院之毛片| 亚洲高清av一区二区| 国产精品国产高清国产av| 国模雨珍浓密毛大尺度150p| 亚洲精品自产拍在线观看动漫 | 久热re这里精品视频在线6 | 欧美裸体xxxx极品| 欧洲尺码日本尺码专线美国又| 亚洲欧美精品一中文字幕| 国产成人综合在线女婷五月99播放 | 国产午夜亚洲精品福利| 高潮迭起av乳颜射后入| 国产玖玖玖玖精品电影| 成人午夜在线观看刺激| 亚洲色欲色欲www| 精品精品久久宅男的天堂| 国产免费高清69式视频在线观看 | 日本黄色一区二区三区四区| 欧产日产国产精品精品| 国产精品一区二区三区自拍| 2019国产精品青青草原| 免费午夜无码片在线观看影院 | 正在播放肥臀熟妇在线视频| 国产精品综合一区二区三区 | 无码人妻一区二区三区免费N鬼沢| 中文字幕在线精品国产| 人人爽人人爽人人片av东京热 | 国产99青青成人A在线| 国产精品熟妇视频国产偷人| 国产成人亚洲欧美二区综合| 精品亚洲国产成人av| 久久精品国产亚洲av品|