首页 > 其他分享 >Springboot配置文件中账号密码等敏感信息的加解密

Springboot配置文件中账号密码等敏感信息的加解密

时间:2024-05-29 12:32:43浏览次数:26  
标签:加密 Springboot 配置文件 encryptor 数据库 加解密 jasypt password

说明:

  • 使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性比较低。
  • 打开application.properties或application.yml,比如MySQL登录密码,Redis登录密码以及第三方的密钥等等一览无余。
  • 这里介绍一个加解密组件jasypt,用以提高配置文件中敏感配置数据的安全性。
  • 本文以数据库连接URL、用户名和数据库密码加密为例。

一,引入Maven依赖

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

说明:
1)这里使用的是2.1.0版本的jasypt-spring-boot-starter。
2)目前jasypt-spring-boot-starter的最新版本是3.0.5。版本不同,配置可能也不一样,请以官网为准。本文的配置,仅供2.1.0版本参考。

二,application.yml配置文件中增加如下内容(加解密时使用)

#jasypt加密的密钥
jasypt:
  encryptor:
    property:
      prefix: "enc@["
      suffix: "]"
    #生产环境中,jasypt.encryptor.password不能与密文放在一起
    #可以通过系统属性、命令行参数或环境变量传递
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7

说明:

  • 上面的password必须自己定义,其他都可以不配置,因为有默认配置。
  • 在生产环境中,jasypt.encryptor.password不能与密文放在一起,我们可以在项目当中通过系统属性、命令行参数或环境变量传递。
  • jasypt默认使用ENC(),()里面是加密后的信息。这里我配置成enc@[],即,[]里面是加密后的配置数据。可以不配置。
默认配置
KeyRequiredDefault Value
jasypt.encryptor.passwordTrue-
jasypt.encryptor.algorithmFalsePBEWITHHMACSHA512ANDAES_256
jasypt.encryptor.key-obtention-iterationsFalse1000
jasypt.encryptor.pool-sizeFalse1
jasypt.encryptor.provider-nameFalseSunJCE
jasypt.encryptor.provider-class-nameFalsenull
jasypt.encryptor.salt-generator-classnameFalseorg.jasypt.salt.RandomSaltGenerator
jasypt.encryptor.iv-generator-classnameFalseorg.jasypt.iv.RandomIvGenerator
jasypt.encryptor.string-output-typeFalsebase64
jasypt.encryptor.proxy-property-sourcesFalsefalse
jasypt.encryptor.skip-property-sourcesFalseempty list


 

三,创建测试类,用以生成加密后的秘钥

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

public class JasyptTest {
    public static void main(String args[]) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();

        //设置加密密码,请和配置文件中的保持一致,默认会添加随机盐
        config.setPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7");

        //设置pool size
        config.setPoolSize(1);

        encryptor.setConfig(config);

        String url = encryptor.encrypt("jdbc:mysql://192.168.111.88:3306/testdb?allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true");
        String name = encryptor.encrypt("你的数据库账号");
        String password = encryptor.encrypt("你的数据库密码");
        System.out.println("数据库连接URL----------------" + url);
        System.out.println("数据库账号----------------"+ name);
        System.out.println("数据库密码----------------" + password);
    }
}

下面是加密后的输出结果

数据库连接URL----------------GxNAlIqGJiGaufrvrxtCS2udohjUDRyGTCNv1iuK+I2zTNK1OjVEAn0kK3tjjoIS9LPTJMiXJNuPma1fFtA6Kydaq0/qfAOOOnZS9dVNiiOneXYCy0CXwFW21HeuqQMSXicz6K6mTUjTSXoLt3BedTeuMBAjIrMvzPyBAxXpKaTGIHWJayu2o+T1IRbkMWOP4c+ruUB57E2SXSrgcvI2n4yq2jK84/Y3VV3HlwnuEdxNlc54P9v+u8cP5F7EmgcZzqONAEGd1o4=
数据库账号----------------7JpTbrd7hOStIks6Nih3vA==
数据库密码----------------kCNP4+yhce5nF+3c+tR3ww==

四,将上面生成的url、name和password替换配置文件中的数据库连接url、数据库账户和密码

spring:
  #数据库相关配置
  datasource:
    url: enc@[YjiBkdvORJnXqy1ZAWXWKtA7YMRI8GAibT9hUyqyrwo9r4K0CnIrOncYpE3Lu9J71VTDsBrJS7fXc5vHM4pkiWr3hY7UNByIIO1rxtybAsd6iw1rQpOxkOGl/9j1qbIHoK8aNg8FR/7tXcHAIi67DE1FF0XkBpwP/TnMKlHCHGwNVcy1W2T/l7u0gs3sFXRZHp9p4yLYiK0Y6MJ++ouMHxkoEOoWyZJMBok8emZQEZAaUZlrWeBrPZQrUZApjYOYWjiAnxo0Zx8=]
    username: enc@[aDnOObes8lHTwQhxKm+lPA==]
    password: enc@[HgklvFzp5ukvdaU9C/tyZqTlO4RrJxor]

#jasypt加密的密钥
jasypt:
  encryptor:
    property:
      prefix: "enc@["
      suffix: "]"
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7

到此,我们就实现了Springboot配置文件里的敏感信息加密。

五、参考链接

标签:加密,Springboot,配置文件,encryptor,数据库,加解密,jasypt,password
From: https://blog.csdn.net/cheagoun/article/details/139212176

相关文章

  • SpringBoot如何使用日志Logback,及日志等级详解
    SpringBoot默认已经集成了SLF4J(SimpleLoggingFacadeforJava)作为日志的接口,以及Logback作为日志的实现。这意味着在大多数情况下,你无需做额外的配置即可开始记录日志。下面是一个简要的指南,包括如何在SpringBoot应用中使用SLF4J和Logback,以及一些实际的代码示例。默......
  • SpringBoot——数据访问
    优质博文:IT-BLOG-CN对于数据访问层,无论是SQL还是NoSQL,SpringBoot默认采用整合SpringData的方式进行统一处理,添加大量自动配置,屏蔽了很多设置。引入各种xxxTemplate,xxxRepository来简化我们对数据访问层的操作。对我们来说只需要进行简单的设置即可。一、整合基......
  • (免费领源码)Java/Mysql数据库+00895springboot的校园二手书销售平台,计算机毕业设计项目
    本科学生毕业设计校园二手书销售平台设计与实现                院系名称:    计算机科学与技术学院    专业班级:                            学生姓名:                           ......
  • 一分钟部署prometheus&grafana全方面监控SpringBoot项目
    0x01创建目录找一个你喜欢的地方,创建项目根目录example:[root@demo-78~]#mkdir/data/prometheus0x02创建配置文件进入到项目根目录:[root@demo-78~]#cd/data/prometheus需要新建三个文件,分别是docker-compose.yml、prometheus.yml、node_down.yml,详细配置如下......
  • springboot+vue+mybatis餐厅点菜管理系统+vue+PPT+论文+讲解+售后
    网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此餐厅点菜信息的管理计算机化,系统化是必要的。设计开发餐厅点菜管理系统不......
  • springboot+vue+mybatis基于java web的公益网站的设计与实现+jsp+PPT+论文+讲解+售后
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公益网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍......
  • SpringBoot3.2更新声明!
    1从SpringBoot3.1升级1.1参数名称发现SpringBoot3.2使用的SpringFramework版本不再尝试通过解析字节码来推断参数名称。如果您在依赖注入或属性绑定时遇到问题,请务必检查您是否在编译时使用了-parameters选项。有关更多详细信息,请参阅"升级到SpringFramework......
  • springboot在tomcat中启动两次
    文章目录代码配置类问题1.重复的ContextListener/多余的web.xml1.1原因1.2解决方案2.SpringBoot的内置Tomcat没有去掉2.1原因2.2解决方案3.代码中有两个类继承了SpringApplication3.1原因3.2解决方案4.Tomcat的server.xml中的配置问题4.1原因4.2解决方案......
  • JAVA计算机毕业设计基于SpringBoot框架的民俗文化交流与交易平台的设计与实现(附源码+s
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在全球化的今天,文化交流日益频繁,民俗文化作为各国独特的文化符号,其传承与保护显得尤为重要。然而,传统的民俗文化交流方式受限于地域、时间等因素,难以......
  • java springboot基于Spring Boot的宿舍管理系统万字文档和PPT(源码+lw+部署文档+讲解
    前言......