springboot使用jasypt加密库实现数据库加解密示例代码

 更新时间:2024年04月24日 11:37:23   作者:把鱼入护  
这篇文章主要给大家介绍了关于springboot使用jasypt加密库实现数据库加解密的相关资料,Jasypt是一个用于配置文件加密的Java库,它可以用来加密和解密配置文件中的敏感信息,如数据库密码、API 密钥等,需要的朋友可以参考下

 一、背景说明

在服务中不可避免的需要使用到一些秘钥(数据库、redis等)开发和测试环境还好,但生产如果采用明文配置将会有安全问题,jasypt是一个通用的加解密库,可以使用它。

jasypt默认使用StringEncryptor来进行加解密,也可以自定义自己的加解密类来替换它 。

二、Jasypt介绍 

2.1 Jasypt是什么?

Jasypt是一个Java库,Java 加密包,用于加密和解密敏感数据,例如密码和API密钥。

它允许开发者以最小的努力为他/她的项目添加基本的加密功能,而且不需要对密码学的工作原理有深刻的了解。

使用Jasypt对密码进行加解密可以保证密码的安全性。

2.2 Jasypt的功能特性

  • 高安全性、基于标准的加密技术,既可用于单向加密也可用于双向加密。
  • 加密密码、文本、数字、二进制文件…与Hibernate的透明集成。
  • 适合集成到基于Spring的应用程序中,也可与Spring Security透明地集成。
  • 对应用程序的配置(即数据源)进行加密的综合能力。
  • 在多处理器/多核系统中具有高性能加密的特殊功能。
  • 开放的API,可与任何JCE供应商一起使用。
  • 提供了一组内置的加密和解密算法,用于保护敏感数据。
    • 其中包括使用对称加密算法(如AES和Blowfish)和非对称加密算法(如RSA)进行加密和解密。

三、示例1:在Spring Boot中使用Jasypt加密和解密敏感数据

  • 在Spring Boot中使用Jasypt加密和解密敏感数据非常简单。
  • 您只需要在Spring Boot应用程序中添加Jasypt依赖项,并在应用程序配置文件中指定加密和解密密钥即可。

以下是在Spring Boot应用程序中使用Jasypt加密和解密密码的示例代码:

3.1 添加Jasypt依赖项

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

3.2 配置加密和解密密钥

在应用程序配置文件(例如application.properties或application.yml)中指定加密和解密密钥。
例如:

jasypt.encryptor.password=mySecretKey

3.3 在应用程序中使用加密和解密功能

在应用程序中使用Jasypt加密和解密密码非常简单。

您只需要使用@Autowired注释注入org.jasypt.encryption.StringEncryptor bean,

并使用encrypt和decrypt方法加密和解密密码。

例如:

/**
     * 对数据库进行加密
     *
     * @param passWord
     * @return
     */
    @GetMapping("/encrypt")
    public String jasyptEncrypt(String passWord) {
        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();

        config.setAlgorithm("PBEWithMD5AndDES");          // 加密的算法,这个算法是默认的
        config.setPassword("SDHYDZ");                        // 加密的密钥,随便自己填写,很重要千万不要告诉别人
        standardPBEStringEncryptor.setConfig(config);
        String encryptedText = standardPBEStringEncryptor.encrypt(passWord);
        return encryptedText;
    }

    /**
     * 对数据库进行解密
     *
     * @param passWord
     * @return
     */
    @GetMapping("/decrypt")
    public String jasyptDecrypt(String passWord) {

        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();

        config.setAlgorithm("PBEWithMD5AndDES");
        config.setPassword("SDHYDZ");
        standardPBEStringEncryptor.setConfig(config);
        String plainText = standardPBEStringEncryptor.decrypt(passWord);
        return plainText;
    }

四、示例2:在Spring Boot中使用Jasypt加解密密码的步骤

以下是在Spring Boot中使用Jasypt加解密密码的步骤:

4.1 在pom.xml文件中添加依赖

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

4.2 在application.properties或application.yml中配置加密算法和密钥:

jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.password=your_secret_password

或者:

jasypt:
  encryptor:
    algorithm: PBEWithMD5AndDES       #加密算法,不配置使用默认的
    password: your_secret_password    #加密秘钥

 在配置文件中配置秘钥仍可能存在密码泄露的可能,因此我将秘钥放在项目启动是加载的:

@SpringBootApplication
public class HyErpApplication {

    public static void main(String[] args) throws UnknownHostException {
        System.setProperty("jasypt.encryptor.password",SecHelper.decryptStr("6qNfbL8HgFdyj7IZyysdzTWf"));
        ConfigurableApplicationContext application = SpringApplication.run(HyErpApplication.class, args);
    }
}

4.3 在application.properties或application.yml中使用加密后的密码:

spring.datasource.password=ENC(encrypted_password)

或者:

spring:
  datasource:
    password: ENC(encrypted_password)

总结 

到此这篇关于springboot使用jasypt加密库实现数据库加解密的文章就介绍到这了,更多相关springboot数据库加解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • idea创建SpringBoot项目时Type选maven project和maven pom有何区别

    idea创建SpringBoot项目时Type选maven project和maven pom有何区别

    Maven是一个Java工程的管理工具,跟其相同功能的工具如Gradle,下面这篇文章主要给大家介绍了关于idea创建SpringBoot项目时Type选maven project和maven pom有何区别的相关资料,需要的朋友可以参考下
    2023-02-02
  • Spring中@Scheduled注解的参数详解

    Spring中@Scheduled注解的参数详解

    这篇文章主要介绍了Spring中@Scheduled注解的参数详解,@Scheduled注解的使用这里不详细说明,@Scheduled注解有几个参数需要说明一下,直接对8个参数进行讲解,需要的朋友可以参考下
    2023-11-11
  • Java getParameter()获取数据为空的问题

    Java getParameter()获取数据为空的问题

    这篇文章主要介绍了Java getParameter()获取数据为空的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java来实现文本转图片需求示例

    Java来实现文本转图片需求示例

    本文主要介绍了Java来实现文本转图片需求示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • spring boot打包成可执行jar包

    spring boot打包成可执行jar包

    本篇文章主要介绍了spring boot打包成可执行jar包,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 详解JAVA 时间处理相关类

    详解JAVA 时间处理相关类

    这篇文章主要介绍了JAVA 时间处理相关类的知识,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • mybatis foreach 属性及其三种使用情况详解

    mybatis foreach 属性及其三种使用情况详解

    这篇文章主要介绍了mybatis foreach 属性及其三种使用情况详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 带你重新认识MyBatis的foreach

    带你重新认识MyBatis的foreach

    这篇文章主要介绍了重新认识MyBatis的foreach,本文提出了一种简化<foreach>写法的设想,更重要的是通过解决空集时生成的SQL语法问题,更深刻地理解MyBatis的foreach的生成机制,需要的朋友可以参考下
    2022-11-11
  • java通过ssh连接执行shell命令,文件传输方式

    java通过ssh连接执行shell命令,文件传输方式

    这篇文章主要介绍了java通过ssh连接执行shell命令,文件传输方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • SpringBoot实现启动类的存放位置

    SpringBoot实现启动类的存放位置

    这篇文章主要介绍了SpringBoot实现启动类的存放位置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论