Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)

这篇具有很好参考价值的文章主要介绍了Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🍓 简介:java系列技术分享(👉持续更新中…🔥)
🍓 初衷:一起学习、一起进步、坚持不懈
🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏
🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝

🍓 更多文章请点击
Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)

Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)

一、哪些信息要加密呢?

密码配置项都不加密?想啥呢?
Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)一般来说,项目配置文件里,所有涉及信息安全的配置项都应该做处理,例如:

  • 用到的数据库、缓存的密码
  • 用到的中间件、消息队列的密码
  • 用到的各种第三方服务的Access_Key
  • 其他第三方服务的通信信息
  • …等等

最起码不能用明文直接写在配置文件里!

一、如何加密配置项呢?

1. 引入jasypt-spring-boot加密组件

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.2</version>
</dependency>

2. 配置加密密钥

jasypt:
  encryptor:
    password: Encrypt

jasypt会使用这个自定义加密密钥,对配置文件里的重要项进行加密

3. 加密

我们直接扩展Spring Boot项目的启动类,项目启动时执行加密测试代码

@Component
public class SpringBootConfigEncrypt implements CommandLineRunner {

    @Autowired
    private ApplicationContext applicationContext;

    @Autowired
    private StringEncryptor encryptor;

    @Override
    public void run(String... args) throws Exception {

        Environment environment = applicationContext.getBean(Environment.class);

        // 首先获取配置文件里的原始明文信息 
        // 根据自己配置文件中的密码读取路径自行更改
        String oldPassword = environment.getProperty("spring.datasource.dynamic.datasource.master.password");

        // 加密
        String encryptPassword = encrypt( oldPassword );

        // 打印加密前后的结果对比
        System.out.println( "MySQL原始明文密码为:" + oldPassword );
        System.out.println( "====================================" );
        System.out.println( "MySQL原始明文密码加密后的结果为:" + encryptPassword );

    }


    private String encrypt( String originPassord ) {
        return encryptor.encrypt( originPassord );
    }

    private String decrypt( String encryptedPassword ) {
        return encryptor.decrypt( encryptedPassword );
    }
}

运行项目,控制台打印:
Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)

4. 修改配置文件,替换待加密配置项

Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)在代码中使用时,jasypt-spring-boot组件会自动将ENC()语法包裹的配置项加密字段自动解密,数据得以还原。

5. 启动,测试

启动正常
Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)测试数据库查询,从而判断连接是否正常,成功
Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)

三、疑问?

1. 加密密钥必须放在ENC()中?为什么是ENC?

自定义的前后缀标记,比如我想换成CodeSheep()来标记加密字段,此时只需要在配置文件里配置一下前后缀即可:

jasypt:
  encryptor:
    property:
      prefix: Code(
      suffix: )

同样yml中的也需要更改
Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)

2. 自定义的加密密钥假如泄露了,不还是有几率解密吗?

自定义加密密钥泄露,那我们的加密字段也还是有可能被别人解密,为此,有几项工作可以让加密变得更加安全

2.1 使用自定义加密器

上文实验加密时,使用的是默认的加密规则,这一点会让当自定义加密密钥泄漏时可能变得不安全。为此我们可以自定义加密规则

@Configuration
public class CodeSheepEncryptorCfg {

    @Bean
    public StringEncryptor myEncryptStringEncryptor() {

        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();

        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("Encrypt");
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);

        return encryptor;
    }
}

将加密测试代码的加密器进行修改

Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)

@Autowired注入原理:

  1. 先按照类型进行注入
  2. 如果在Spring容器中存在同一个类型的多个bean,那么此时在进行注入的时候是按照属性名称进行注入

2.2 加密密钥不要写在配置文件中

如果觉得上面这种方式还是可能会导致加密密钥泄露的话,可以直接将加密密钥从配置文件中拿掉,有三种方式

2.2.1 方式一:直接作为程序启动时的命令行参数来带入
java -jar app.jar --jasypt.encryptor.password=Encrypt
2.2.2 方式二:直接作为程序启动时的应用环境变量来带入
java -Djasypt.encryptor.password=Encrypt -jar app.jar
2.2.3 方式三:甚至可以作为系统环境变量的方式来带入

Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)

Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)登录环境和非登录环境读取配置文件的顺序是不一样的,Shell脚本内容过多,不进行详细介绍,可以在
Linux Shell编程入门到实战(一)
Linux Shell编程入门到实战(二)
中有详细介绍自行学习

我们提前配置好自定义全局环境变量,则直接在Spring Boot的项目配置文件中做如下配置即可:

linux中
  1. 编辑/etc/profile全局配置文件

    export JASYPT_ENCRYPTOR_PASSWORD = Encrypt
    
  2. 重载配置文件/etc/profile, 因为配置文件修改后要立刻加载里面的数据就需要重新加载

    source /etc/profile
    
  3. yml中

    jasypt:
      encryptor:
        password: ${JASYPT_ENCRYPTOR_PASSWORD}
    

    这时候也安全很多

四、加密工具类很多,这里再列举两种

加密工具类非常多,大家可以自行选择
这里列举其他两种:

4.1 第一种

public class JasyptUtil {

    public static void main(String[] arg) {
        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
        /*配置文件中配置如下的算法*/
        standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES");
        /*配置文件中配置的password*/
        standardPBEStringEncryptor.setPassword("Encrypt");
        /*要加密的文本*/
        String name = standardPBEStringEncryptor.encrypt("root");
        String password = standardPBEStringEncryptor.encrypt("123456");
        /*将加密的文本写到配置文件中*/
        System.out.println("name=" + name);
        System.out.println("password=" + password);
    }

}

4.2 第二种

public class JasyptUtil {

    public static void main(String[] args) {
        String account = "root";
        String password = "123456";
        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        //秘钥
        encryptor.setPassword("Encrypt");
        //密码进行加密
        String newAccount = encryptor.encrypt(account);
        String newPassword = encryptor.encrypt(password);
        System.out.println("加密后账号:" + newAccount);
        System.out.println("加密后密码:" + newPassword);
    }

}

Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)

Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)文章来源地址https://www.toymoban.com/news/detail-470471.html

到了这里,关于Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot+jasypt-spring-boot-starter实现配置文件明文加密

    springboot:2.1.4.RELEASE JDK:8 jasypt-spring-boot-starter:3.0.2 Jasypt默认算法为PBEWithMD5AndDES,该算法需要一个加密密钥,可以在应用启动时指定(环境变量)。也可以直接写入配置文件 3.1 application.properties配置文件版 加密后,可删除jasypt.encryptor.password配置;发版时可在命令行中配置 3.2 函数

    2024年02月15日
    浏览(42)
  • Spring Boot学习随笔- Jasypt加密数据库用户名和密码以及解密

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 Jasypt 全称是Java Simplified Encryption,是一个开源项目。 Jasypt与Spring Boot集成,以便在应用程序的属性文件中加密敏感信息,然后在应用程序运行时解密这些信息。 可以使用 jasypt-spring-boot-starter 这个依赖项。从而实现属性源

    2024年02月04日
    浏览(69)
  • OpenHarmony:使用网络组件axios与Spring Boot进行前后端交互

    流程图: 前端请求函数 这两个函数是使用axios库发起HTTP GET请求的函数,用于与服务器进行通信 服务器端点: http://192.168.211.1:8090/test/1 这是我本机的ip地址和springboot运行端口,使用在windows终端输入ipconfig可查看 返回值: 该函数返回一个Promise,该Promise在请求成功时将包含

    2024年01月22日
    浏览(54)
  • 加密组件Jasypt学习、实战及踩坑记录

    最近入职新公司,因几乎全部项目都使用到jasypt,故而初步学习记录下本文(持续更新)。 官网及GitHub给出的简介:使用简单,性能好,特性features非常丰富;支持 另,有个开源Jasypt-spring-boot组件,GitHub,集成Jasypt,方便Spring Boot开发者使用。 开发中最常见的场景就是对数据

    2023年04月16日
    浏览(41)
  • spring boot如何实现对应用系统进行请求加密、响应加密处理

    参考文档:https://blog.csdn.net/zhuocailing3390/article/details/125054315 通过实现 RequestBodyAdvice 接口,对前端请求的参数进行解密并且重新让真实结构的数据进入到Controller中; 通过实现 ResponseBodyAdvice 接口,将响应的参数进行加密,返回到前端; 扩展: 可以通过自定义注解,实现对指

    2024年02月07日
    浏览(40)
  • spring boot集成jasypt 并 实现自定义加解密

    由于项目中的配置文件 配置的地方过多,现将配置文件统一放到nacos上集中管理 且密码使用加密的方式放在配置文件中 项目中组件使用的版本环境如下 spring cloud 2021.0.5 spring cloud alibaba 2021.0.5.0 spring boot 2.6.13 配置文件的加密使用 加密库 jasypt 引入maven依赖 添加配置 使用jasy

    2024年02月11日
    浏览(42)
  • Spring Boot项目Jar包加密:防止反编译的安全实践

    🎉Spring Boot项目Jar包加密:防止反编译的安全实践 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果文中出现错误

    2024年02月04日
    浏览(44)
  • 使用jasypt对springboot配置信息加密

    jasypt密码可以放到配置文件或者启动命令中,与其这样不如直接写到代码里 注意:上面的@Primary 注解必须加上,覆盖默认实现。 将加密后的信息用前面用 ENC( ) 包起来 例如: 原始配置: 改成: (完) 参考: [1] https://zhuanlan.zhihu.com/p/480828512 [2] https://github.com/ulisesbocchio/jasypt-sp

    2024年02月05日
    浏览(43)
  • SpringBoot使用Jasypt对配置文件加密、数据库密码加密

    Dmo源码请点这里! Jasypt是一个Java简易加密库,用于加密配置文件中的敏感信息,如数据库密码。jasypt库与springboot集成,在实际开发中非常方便。 1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持,出于安全考虑,Spring boot 配置文件中的敏感信息通常需要对它进

    2024年04月28日
    浏览(47)
  • [Spring boot] Spring boot 整合RabbitMQ实现通过RabbitMQ进行项目的连接

     🍳作者:天海奈奈 💭眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂 o f f e r ,程序员的必备刷题平台 − − 牛客网  👉🏻点击开始刷题之旅 目录 什么是RabbitMQ   消息队列:接受并转发消息,类似于快递公司 消息队列的优点 消息队列的特性 RabbitMQ特点 RabbitMQ核

    2024年01月24日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包