Spring Boot配置文件敏感信息加密的开源方案实现

程序员的黑洞
• 阅读 464

简介

最近隔离在家,做项目中发现项目中的配置文件敏感信息都是明文存储的的,很不安全。例如:数据库的密码,redis的密码,oss存储的相关key等等。

然后自己也上网百度了下相关的资料。找到了一个开源的配置文件加密实现:jasypt

jasypt

开源地址:asypt-spring-boot

官网:http://www.jasypt.org

jasypt的使用

引入依赖

gradle:

compile group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '3.0.4'

maven:

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

修改配置文件

# 配置文件加密密码(必输)
jasypt.encryptor.password=123
# 3.0以上版本,下面这两项必须设置
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator

加密字符并替换

编写测试类,生成加密字符
package com.unfbx.gradle_test;

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

/**
 * 描述:
 *
 * @author
 * @date 2022-04-06
 */
public class Test {

    public static void main(String[] args) {
        // jasypt.encryptor.password=123
        String salt = "123";
        //待加密文本
        String password = "123456";
        PooledPBEStringEncryptor stringEncryptor = new PooledPBEStringEncryptor();
        stringEncryptor.setConfig(cryptOr(salt));
        String encryptStr = stringEncryptor.encrypt(password);
        System.out.println(encryptStr);
    }

    public static SimpleStringPBEConfig cryptOr(String password) {
        //jasypt 默认的加密方式
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(password);
        config.setAlgorithm(StandardPBEByteEncryptor.DEFAULT_ALGORITHM);
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName(null);
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setStringOutputType("base64");
        return config;
    }
}
输出加密文本
cRYimzBiTWER5G03myGgTw==
替换
# pgsql
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/postgis_test
spring.datasource.username=postgres
# 替换的密文默认“ENC(”开头,“)” 结尾
# 可自定义,github文档有说明
spring.datasource.password=ENC(M97tssJr1p6k9gvW3AH00w==)

启动测试

简单写个数据库查询接口测试下,数据库密码加密后是否生效,直接返回解密后的密码。

@Value("${spring.datasource.password}")
private String dbPassword;

@GetMapping("/db_password")
public String dbVersion(){
    return dbPassword;
}

Spring Boot配置文件敏感信息加密的开源方案实现

后续还是要看一下源码,来了解下实现原理。

本文源码地址:https://github.com/Grt1228/postgis

点赞
收藏
评论区
推荐文章
kenx kenx
2年前
Java MD5和SHA256等常用加密算法
前言我们在做java项目开发的时候,在前后端接口分离模式下,接口信息需要加密处理,做签名认证,还有在用户登录信息密码等也都需要数据加密。信息加密是现在几乎所有项目都需要用到的技术,身份认证、单点登陆、信息通讯、支付交易等场景中经常会需要用到加密算法,所谓加密算法,就是将原本的明文通过一系列算法操作变成密文。1.BASE严格地说,属于编码格式,而非加密算法
雷厉风行 雷厉风行
1年前
1Password 7 for Mac 自带激活版-MacOS密码管理,自动登录,用过就离不开了
1Password7forMac是一款功能强大的密码管理软件,它可以帮助Mac用户管理和保护所有的密码和敏感信息。它不仅可以加密存储您的密码,而且可以帮助您自动生成复杂的密码,并提高您在互联网上的安全性。
Stella981 Stella981
2年前
Spring cache Redis Key生成策略
最近使用Springcache,发现使用默认生成的key策略只使用了方法入参作为key,很不灵活,用到真实的项目中也不太靠谱,于是自己实现它的key生成策略。参考官方文档:http://docs.spring.io/spring/docs/current/springframeworkreference/html/cache.html(http
Stella981 Stella981
2年前
Apache Shiro反序列化识别那些事
1.1关于ApacheShiroApacheshiro是一个Java安全框架,提供了认证、授权、加密和会话管理功能,为解决应⽤安全提供了相应的API:1.认证⽤用户身份识别,常被称为用户”登录”2.授权访问控制3.密码加密保护或隐藏数据防止被偷窥4.会话管理用户相关的时间敏感的状态1.2Shiro反序列化
Stella981 Stella981
2年前
Spring Boot 实现配置文件加解密原理
SpringBoot配置文件加解密原理就这么简单背景接上文《失踪人口回归,mybatisplus3.3.2发布》\1\,提供了一个非常实用的功能「数据安全保护」功能,不仅支持数据源的配置加密,对于springboot全局的yml/properties文件均可实现敏感信息加密功能,在一定的程度上控制开发人员流动导致
Stella981 Stella981
2年前
Spring Security使用详解9(密码加密配置)
在之前的文章中密码都是使用明文的方式进行存储,但这样会有很大的安全隐患。所以正常做系统时,密码都要加密处理。而在SpringBoot中配置密码加密非常容易,下面通过样例进行演示。九、密码加密配置1、样例代码(1)要配置密码加密只需要修改两个地方。首先要修改HttpSecurity配置中的PasswordEncoder
Wesley13 Wesley13
2年前
JAVA加解密算法设计与应用
业务场景APP移动端、WEB、桌面端、第三方平台密码等敏感数据加密设计如app端登录密码加密设计对于登录密码不需要进行解密只需要加密算法结合规则进行比较就能得到密码正确与否方法一(签名保证安全)1.密码等敏感信息取Md5值对所有值(加上timestamp)
Stella981 Stella981
2年前
Spring Boot demo系列(九):Jasypt
2021.2.24更新1概述Jasypt是一个加密库,Github上有一个集成了Jasypt的SpringBoot库,叫jasyptspringboot,本文演示了如何使用该库对配置文件进行加密。2依赖首先添加依赖:<dependency
Stella981 Stella981
2年前
Kubernetes ConfigMap vs Secret
场景对比Secret:当你想要存储一些敏感数据时使用Secret,例如(passwords,OAuthtokens,sshkeys,credentials等)ConfigMap:当需要存储一些非敏感配置数据时可以使用ConfigMap,例如应用程序的ini,json等配置文件。ConfigMap:
Wesley13 Wesley13
2年前
Java编程安全漏洞之:数据或系统信息安全
Cleartext\_Submission\_of\_Sensitive\_Information明文提交敏感数据,使用明文通信方式传输、提交敏感数据修复建议加密后再提交或使用加密的通信方式传输、提交敏感数据。Use\_of\_Insufficiently\_Random\_Values使用了不够随机的随机值
程序员的黑洞
程序员的黑洞
Lv1
共看明月应垂泪,一夜乡心五处同。
文章
1
粉丝
2
获赞
2
热门文章

暂无数据