Java项目使用jasypt加密和解密配置文件中关键信息

一、使用背景

项目中application.yml 配置文件中,如数据库、redis、加密算法的私钥等各种配置的username,password的值都是明文的,其实存在一定的安全隐患,如果被人拿到这些配置文件,将直接对系统安全构成极大威胁,为了加密敏感配置,我们可以使用jasypt 的方式进行明文加密。

二、cmd命令行使用

jasypt.jar包下载地址: https://repo1.maven.org/maven2/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar

加密命令

复制代码
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=123456Ab algorithm=PBEWithMD5AndDES

input为你的明文密码。

password为盐值。

algorithm 是一个规则,请勿更改

加密过程和结果

解密命令

复制代码
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=bTd6xo3JQbyO4PO2iUWVNQ== password=123456Ab algorithm=PBEWithMD5AndDES

input为你的明文密码。

password为盐值。

algorithm 是一个规则,请勿更改

三、Java代码使用

项目中引入依赖 在pom.xml里面添加下面内容

XML 复制代码
<!-- jasypt -->
<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt</artifactId>
    <version>1.9.2</version>
</dependency>

上代码JsyptUtil.java

java 复制代码
package com.jasypt.tool;

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

public class JsyptUtil {

	public static void main(String[] args) {

		String s = encryptPassword("123456Ab", "root");
		System.out.println("root加密后:" + s);

		String salt = decryptPassword("123456Ab", s);
		System.out.println("root解密后:" + salt);

	}

	public static SimpleStringPBEConfig encryJsypt(String password) {
		// 加解密配置
		SimpleStringPBEConfig config = new SimpleStringPBEConfig();
		config.setPassword(password);
		config.setAlgorithm("PBEWithMD5AndDES");
		config.setKeyObtentionIterations("1000");
		config.setPoolSize("1");
		config.setProviderName("SunJCE");
		config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
		config.setStringOutputType("base64");
		return config;
	}

	/*
	 * 		加密操作
	 */
	public static String encryptPassword(String password, String value) {
		PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
		SimpleStringPBEConfig config = encryJsypt(password);
		encryptor.setConfig(config);
		String resutl_encrypt = encryptor.encrypt(value);
		return resutl_encrypt;
	}

	/*
	 * 		解密操作
	 */
	public static String decryptPassword(String password, String value) {
		PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
		SimpleStringPBEConfig config = encryJsypt(password);
		encryptor.setConfig(config);
		String result_decrypt = encryptor.decrypt(value);
		return result_decrypt;
	}
}

运行结果

相关推荐
观无6 分钟前
若依EasyExcel实现单元格合并
开发语言·前端·javascript
雨晨源码(同名B站)8 分钟前
基于Python的网易云音乐评论数据情感化分析系统 音乐爬虫信息可视化 |SnowNLP评论情感分析
开发语言·hadoop·爬虫·python·信息可视化·毕业设计
我不是疯子是傻子22 分钟前
串口通信数据帧粘包拆包再进化:基于 Qt 的滑动窗口与 CRC 校验实战
开发语言·qt
程序员老陆31 分钟前
Qt中实现窗口真全屏(覆盖Windows任务栏)
开发语言·windows·qt
xiaohaiAIgeo31 分钟前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
小强库计算机毕业设计1 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
霸道流氓气质1 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
怪奇云呼军1 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
编程令我快乐1 小时前
maven部分构建参数讲解
java·maven
ZC跨境爬虫1 小时前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode