您的位置 首页 java

「Java工具类」AES对称加密工具类

介绍语

本头条号主要是 Java 常用关键技术点,通用工具类的分享;以及springboot+springcloud+ Mybatis plus+druid+mysql+ redis +swagger+ maven + docker 等集成框架的技术分享;datax、 kafka 、flink等大数据处理框架的技术分享。文章会不断更新,欢迎码友关注点赞收藏转发!

关注多的话,后面会录制一些视频教程,图文和视频结合,比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱,码友们冲啊

如果码友觉得代码太长,可以从头到尾快速扫射一遍,了解大概即可。觉得有用后再转发收藏,以备不时之需。

正文:

项目中你的数据库密码不会是直接明文吧?如果是,那请你考虑下是不是有安全风险呀。我的项目中涉及到密码的,都用这个工具类进行加密,在配置文件(如 bootstrap .yml)中配置加密后的密文,在数据库配置类中再解密,这样数据库的密码就不会裸奔了。下面给出使用的案例简单截图,以后也会分享对mysql密码进行加密处理的案例和源码。

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

「Java工具类」AES对称加密工具类

配置文件

在配置类中解密

「Java工具类」AES对称加密工具类

配置类

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

「Java工具类」AES对称加密工具类

使用例子

上面案例使用的工具类:

  import org. apache .commons.codec.binary.Base64;
 
 import  javax .crypto.*;
 import  java x.crypto.spec.SecretKeySpec;
 import java.nio.charset.StandardCharsets;
 import java.security.InvalidKey Exception ;
 import java.security.NoSuchAlgorithmException;
 import java.security. Secure Random;
 
 
 /**
  * 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[]  decode Content = 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的还是自己封装的了,现在有空就会总结项目中大部分的工具类,分享给各位码友。如果文章中涉及的代码有侵权行为请通知鄙人处理。

计划是先把工具类整AESU理出来,正所谓工欲善其事,必先利其器。项目中不管是普通单体项目还是多模块maven项目或是分布式微服务,一部分功能模块都是可以重用的,工具类模块就是其中之一。

文章来源:智云一二三科技

文章标题:「Java工具类」AES对称加密工具类

文章地址:https://www.zhihuclub.com/190054.shtml

关于作者: 智云科技

热门文章

网站地图