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

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

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

      「Java工具類」AES對稱加密工具類

      介紹語

      本頭條號主要是Java常用關鍵技術點,通用工具類的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技術分享;datax、kafka、flink等大數據處理框架的技術分享。文章會不斷更新,歡迎碼友關注點贊收藏轉發!

      關注多的話,后面會錄制一些視頻教程,圖文和視頻結合,比如:圖書介紹網站系統、搶購系統、大數據中臺系統等。技術才是程序猿的最愛,碼友們沖啊

      如果碼友覺得代碼太長,可以從頭到尾快速掃射一遍,了解大概即可。覺得有用后再轉發收藏,以備不時之需。

      正文:

      項目中你的數據庫密碼不會是直接明文吧?如果是,那請你考慮下是不是有安全風險呀。我的項目中涉及到密碼的,都用這個工具類進行加密,在配置文件(如bootstrap.yml)中配置加密后的密文,在數據庫配置類中再解密,這樣數據庫的密碼就不會裸奔了。下面給出使用的案例簡單截圖,以后也會分享對mysql密碼進行加密處理的案例和源碼。

      mysql使用案例截圖

      在配置文件中配置加密后的密文

       在配置了中解密

      工具類使用例子。(已修改了工具類的方法名)

      上面案例使用的工具類:

      import org.apache.commons.codec.binary.Base64;
      
      import javax.crypto.*;
      import javax.crypto.spec.SecretKeySpec;
      import java.nio.charset.StandardCharsets;
      import java.security.InvalidKeyException;
      import java.security.NoSuchAlgorithmException;
      import java.security.SecureRandom;
      
      
      /**
       * AES加解密工具類
       *
       * @author liangxn
       */
      public class AesUtil {
      
          /**
           * SecureRandom類的seed,可以改為自己的字符串
           */
          private static final String RANDOM_SEED = "seed-abcxyz-123-456";
      
          private AesUtil() {}
      
          /**
           * 加密方法
           */
          public static String encrypt(String content) {
              // 待加密的內容
              byte[] contentByte = content.getBytes(StandardCharsets.UTF_8);
              byte[] data = new byte[0];
              try {
                  data = cipher(contentByte, Cipher.ENCRYPT_MODE);
              } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) {
                  e.printStackTrace();
              }
              return new String(Base64.encodeBase64(data), StandardCharsets.UTF_8);
          }
      
          /**
           * 加密方法
           */
          public static String decrypt(String content) {
              byte[] decodeContent = Base64.decodeBase64(content);
              byte[] data = new byte[0];
              try {
                  data = cipher(decodeContent, Cipher.DECRYPT_MODE);
              } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) {
                  e.printStackTrace();
              }
              return new String(data, StandardCharsets.UTF_8);
          }
      
          /**
           * 加解密計算器
           *
           * @param content 要加密的內容
           * @param mode    計算模式(本工具類用到Cipher.ENCRYPT_MODE、Cipher.DECRYPT_MODE這兩個)
           * @return
           */
          private static byte[] cipher(byte[] content, int mode) throws NoSuchAlgorithmException, NoSuchPaddingException,
                  InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
              if (content == null) {
                  throw new NullPointerException("content為空");
              }
              if (mode != Cipher.ENCRYPT_MODE && mode != Cipher.DECRYPT_MODE) {
                  throw new IllegalArgumentException("mode非法");
              }
      
              // AES密鑰生成器實例
              KeyGenerator keygen = KeyGenerator.getInstance("AES");
              // 安全隨機數工具,創建SHA1PRNG隨機算法的實例
              SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
              // 設置種子
              random.setSeed(AesUtil.RANDOM_SEED.getBytes(StandardCharsets.UTF_8));
              // 初始化密鑰生產器
              keygen.init(128, random);
              // 生成原始對稱密鑰
              SecretKey secretKey = keygen.generateKey();
              // 獲得原始對稱密鑰的字節數組
              byte[] secretKeyByte = secretKey.getEncoded();
      
              // 生成AES密鑰
              SecretKey key = new SecretKeySpec(secretKeyByte, "AES");
              // 創建密碼器
              Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
              // 初始化密碼器
              cipher.init(mode, key);
      
              // 數據加密
              return cipher.doFinal(content);
          }
      }
      

      鄙人編碼十年多,在項目中也積累了一些工具類,很多工具類在每個項目都有在用,很實用。大部分是鄙人封裝的,有些工具類是同事封裝的,有些工具類已經不記得是ctrl+c的還是自己封裝的了,現在有空就會總結項目中大部分的工具類,分享給各位碼友。如果文章中涉及的代碼有侵權行為請通知鄙人處理。

      計劃是先把工具類整理出來,正所謂工欲善其事,必先利其器。項目中不管是普通單體項目還是多模塊maven項目或是分布式微服務,一部分功能模塊都是可以重用的,工具類模塊就是其中之一。

      posted @ 2021-10-30 00:25  Java夜未眠  閱讀(329)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 深夜福利啪啪片| 蜜臀av黑人亚洲精品| 久久亚洲国产精品久久| 国产免费播放一区二区三区| 丰满人妻一区二区三区无码AV| 久久国产精品第一区二区| 中文无码av一区二区三区| 久久99久久99精品免观看| 欧美大胆老熟妇乱子伦视频| 男受被做哭激烈娇喘gv视频| 麻豆麻豆麻豆麻豆麻豆麻豆| 久久这里有精品国产电影网| 隆尧县| 欧美国产日韩久久mv| 丁香五月激情综合色婷婷| 建德市| 四虎永久在线精品8848a| 亚洲av永久无码精品水牛影视 | 人妻夜夜爽天天爽一区| 欧美黑人乱大交| 国产尤物AV尤物在线看| 精品人妻中文字幕av| 激情综合网激情综合网激情| 国产97视频人人做人人爱| 影音先锋啪啪av资源网站| 四虎在线成人免费观看| 久草网视频在线观看| 性动态图无遮挡试看30秒| 亚洲av第三区国产精品| 天堂网在线.www天堂在线资源| 粉嫩一区二区三区精品视频| 精品国产中文字幕av| 无码一区二区三区免费| 东京热一区二区三区在线| 一区二区亚洲人妻精品| 国产av午夜精品福利| 熟女人妻aⅴ一区二区三区电影| 精精国产xxx在线观看| 亚洲午夜久久久久久噜噜噜 | 免费观看日本污污ww网站69| 一区二区视频|