微服务nacos或者yml配置内容部分加密jasypt

写在最前:因业务需要把nacos配置中的部分密码加密,不能暴露在外,本想用nacos官方的插拔插件nacos-aes-encryption-plugin的,但是比较复杂且官方文档说的不清不楚所以弃用,有兴趣的可以参考。链接:https://nacos.io/zh-cn/docs/v2/plugin/config-encryption-plugin.html。遂使用第二种方法:jasypt,以下是具体用法。

1.引入依赖(版本自定):

xml 复制代码
<dependency>
   <groupId>com.github.ulisesbocchio</groupId>
   <artifactId>jasypt-spring-boot-starter</artifactId>
   <version>3.0.5</version>
</dependency>

2.yml新增配置:

yaml 复制代码
jasypt:
  encryptor:
    password: U3buwRJdQ2023(随便取)
    algorithm: PBEWithMD5AndDES(固定值)
        //配置格式(不写默认ENC)
    property:
      prefix: "P["
      suffix: "]"

注:algorithm是加密算法,官方默认的加密算法是 PBEWITHHMACSHA512ANDAES_256,但是如果你用的是 JDK1.8,还用不了这个算法,JDK9以上才支持,所以可以把这个算法改成PBEWithMD5AndDES。
2.1.2版本默认加密方式为:PBEWithMD5AndDES
3.0.3版本默认加密方式为:PBEWITHHMACSHA512ANDAES_256
当引入3.0.3依赖,却没有添加相关jasypt加解密配置,而密文通过【PBEWithMD5AndDES】来加密,启动会报错。
需要切换为【PBEWITHHMACSHA512ANDAES_256】方式进行。

3.生成加密密文:

yaml 复制代码
/**
     * jasypt.encryptor.password 对应 配置中心 application-dev.yml 中的密码
     */
    @Test
    public void testEnvironmentProperties() {
        System.setProperty(JASYPT_ENCRYPTOR_PASSWORD, "xxx");
        StringEncryptor stringEncryptor = new DefaultLazyEncryptor(new StandardEnvironment());

        //加密方法
        System.out.println(stringEncryptor.encrypt("123456"));
        //解密方法
        System.out.println(stringEncryptor.decrypt("saRv7ZnXsNAfsl3AL9OpCQ=="));
    }

4.修改nacos或yml配置为密文(必须得是ENC(密文)格式,若想更改前缀需配置)

yaml 复制代码
spring:
  datasource:
    password: ENC(密文)
相关推荐
Kuo-Teng14 分钟前
LeetCode 73: Set Matrix Zeroes
java·算法·leetcode·职场和发展
王元_SmallA17 分钟前
服务器公网IP、私网IP、弹性IP是什么?区别与应
java·后端
葵续浅笑36 分钟前
LeetCode - 杨辉三角 / 二叉树的最大深度
java·数据结构·算法·leetcode
装不满的克莱因瓶1 小时前
【Java架构师】各个微服务之间有哪些调用方式?
java·开发语言·微服务·架构·dubbo·restful·springcloud
N 年 后1 小时前
cursor和传统idea的区别是什么?
java·人工智能·intellij-idea
CodeLongBear1 小时前
从Java后端到Python大模型:我的学习转型与规划
java·python·学习
Miraitowa_cheems1 小时前
LeetCode算法日记 - Day 94: 最长的斐波那契子序列的长度
java·数据结构·算法·leetcode·深度优先·动态规划
Zz_waiting.1 小时前
统一服务入口-Gateway
java·开发语言·gateway
ada7_1 小时前
LeetCode(python)——49.字母异位词分组
java·python·leetcode
DyLatte2 小时前
AI时代的工作和成长
java·后端·程序员