IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 云原生之SpringBoot:Jasypt对SpringBoot用户密码进行加密和解密 -> 正文阅读

[Java知识库]云原生之SpringBoot:Jasypt对SpringBoot用户密码进行加密和解密

前言

配置文件中的敏感信息(数据库密码等)直接明文写在配置中,对安全来说,是一个很大的挑战。一旦信息泄漏,将会带来很大的安全隐患。尤其在一些对安全性要求很高的场景,因此我们就考虑如何对密码进行加密。本方案着重介绍Jasypt对SpringBoot配置文件加密。

1、Jasypt是什么?

Jasypt 这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成 hibernate,Spring Security(Acegi)来增强密码管理。

Jasypt是一个Java库,可以使开发者不需太多操作来给Java项目添加基本加密功能,而且不需要知道加密原理。

根据Jasypt官方文档,Jasypt可用于加密任务与应用程序,例如加密密码、敏感信息和数据通信、创建完整检查数据的sums. 其他性能包括高安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、文本、数字和二进制文件。
Jasypt也可以与Acegi Security整合也即Spring Security。Jasypt亦拥有加密应用配置的集成功能,而且提供一个开放的API从而任何一个Java Cryptography Extension都可以使用Jasypt。

官方参考文档:
https://github.com/ulisesbocchio/jasypt-spring-boot/tree/jasypt-spring-boot-parent-2.1.2

2、引入实现包

1、一般来说,只要引入jar包,就能自动实现配置文件加解密的功能,由于我们的项目采用的是xml注入参数的形式,所以根据jasypt文档描述,除了引入jar包,还需要改造启动类方式:

在这里插入图片描述

1、启动模块中pom需要引入

“配置加解密” 这个配置已经由适配层引入,在pom.xml

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

3、代码改造

现网有两种启动类代码,需要进行不同的改造操作。具体如下:

1、第一种:启动类代码只有一行

原有启动类:

SpringApplication.run(启动模块类名字.class, args);

替换为:

new SpringApplicationBuilder().environment(new StandardEncryptableEnvironment())
.sources(启动模块类名字).run(args);

2、第二种:启动类代码有多行

原有启动类:

ConfigurableApplicationContextapplicationContext=new SpringApplicationBuilder().environment(newStandardEncryptableEnvironment()).sources(启动模块类名字).run(args);
SpringContextHolder.initApplicationContext((ApplicationContext)applicationContext);

替换为:

try {
ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder().environment(new StandardEncryptableEnvironment()).sources(启动模块类名字).run(args);
SpringContextHolder.initApplicationContext((ApplicationContext)applicationContext);
}
catch (Exception e) {
LOGGER.error(e.getMessage());
}

4、加密解密

1、使用代码加解密:

BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//加密所需的salt(盐)
textEncryptor.setPassword("hxmec");
//要加密的数据(数据库的用户名或密码)
String username = textEncryptor.encrypt("dp");
String password = textEncryptor.encrypt("dp123456!");
System.out.println("username:"+username);
System.out.println("password:"+password);

2、使用jar包进行加解密:
注:jar包可从此处下载

使用jar命令加密方式:

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="需要密码的明文" password=秘钥 algorithm=PBEWithMD5AndDES

指令里面的关键词:

  • input:为需加密的明文参数。
  • password : 是自己自定义的密钥。
  • algorithm : 使用的加密算法。

加密算法:
PBEWITHMD5ANDDES、PBEWITHMD5ANDTRIPLEDES、PBEWITHSHA1ANDDESEDE、PBEWITHSHA1ANDRC2_40

使用jar命令解密方式:

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="加密后的密码" password=秘钥 algorithm=PBEWithMD5AndDES

5、配置文件中使用加密后的密码

1、配置文件中需要将明文修改为以下的:

注意:密文用ENC()包起来

username: ENC(dvXWu4WYjqxHKBmApPNo6A==) 加密后的用户名称
password: ENC(Cbfgv3nG1jGoZXToQ6JdLZb1/D/0hzuG) 加密后的密码

6、秘钥保存方式:

1、配置文件中

jasypt:
  encryptor:
    password: test

2、保存在环境变量中
在机器中执行写入环境变量:

echo 'export JASYPT_PASSWORD=test' >> /etc/profile
source /etc/profile

在启动包时加入密码环境变量:

java -jar app-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=${JASYPT_PASSWORD}

3、启动时直接写入
java -Djasypt.encryptor.password=test -jar xxx.jar

写在最后

1、在使用过程中,配置的秘钥长度过长或者秘钥过于复杂会导致识别不了密码。
2、尽量不要使用启动时直接写入的方式。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:38:26  更:2022-09-30 00:42:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/30 13:42:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码