• springboot数据库密码加密-使用自定义加密算法


    jasypt是一个简单方便的第三方加解密库,可以快速的集成到springboot环境中,在3.x之后默认基于的是PBEWITHHMACSHA512ANDAES_256加密算法;

    如果需要自定义加密算法可以参考下面的方式,参考:https://github.com/ulisesbocchio/jasypt-spring-boot

    1. 引入依赖
       <!-- 数据库加密 -->
      <dependency>
              <groupId>com.github.ulisesbocchio</groupId>
              <artifactId>jasypt-spring-boot-starter</artifactId>
              <version>3.0.2</version>
      </dependency>
      <!-- 如果要使用SM4加密,就需要引入下面的jar -->
      <dependency>
             <groupId>org.bouncycastle</groupId>
             <artifactId>bcpkix-jdk15on</artifactId>
             <version>1.60</version>
      </dependency>
      <!-- hutool的工具包 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.5.9</version> </dependency>
    2. 编写自定义的加解密工具类(这里使用SM4加密算法,引用的是hutool的工具类)
      import org.jasypt.encryption.StringEncryptor;
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.stereotype.Component;
      
      import cn.hutool.core.util.CharsetUtil;
      import cn.hutool.crypto.SmUtil;
      import cn.hutool.crypto.symmetric.SymmetricCrypto;
      
      /**
       * jasypt 自定义数据库密码加密器 - SM4加密算法
       * 
       * @author jiaqiankun
       */
      @Component("customStringEncryptor")
      public class CustomStringEncryptor implements StringEncryptor {
      
          @Value("${jasypt.encryptor.salt}")
          private String salt;
      
          @Override
          public String encrypt(String message) {
              SymmetricCrypto sm4 = SmUtil.sm4(salt.getBytes());
              String encryptHex = sm4.encryptHex(message);
              return encryptHex;
          }
      
          @Override
          public String decrypt(String encryptedMessage) {
              SymmetricCrypto sm41 = SmUtil.sm4(salt.getBytes());
              String decryptStr = sm41.decryptStr(encryptedMessage, CharsetUtil.CHARSET_UTF_8);
              return decryptStr;
          }
      
      }
    3. 在配置文件中指定自定义的加密器并定义一个salt
      #密码
      spring:
        datasource:
         url: jdbc:mysql://localhost:3306/fmbs?characterEncoding=utf8&useSSL=true
      username: root
      #ENC是一个标识,可以在下方通过jasypt.encryptor.property.prefix
      #和jasypt.encryptor.property.suffix进行指定,默认是enc(密文)
      password: ENC(a44625760f8fc68e8d3c6e3f18f898cd)
      #属性文件加密
      jasypt:
         encryptor:
         #salt必须为16位字符串,如果使用默认算法,此处的salt应该改为password,自定义随意命名,
      #在
      customStringEncryptor中注入正确即可
         salt: ya024uspkidtclu3
      bean: customStringEncryptor
  • 相关阅读:
    并发编程--锁--锁的理解及分类
    String -- 从源码剖析String类
    Spring 抽象的缓存包 spring-cache
    小白学做菜笔记
    使用Lists.partition切分性能优化
    String--常见面试题
    常用的Linux命令
    去除字符串中的空格
    微信小程序切换选中状态
    微信小程序面试题总结
  • 原文地址:https://www.cnblogs.com/qiankun-site/p/14926141.html
Copyright © 2020-2023  润新知