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;
	}
}

运行结果

相关推荐
专注VB编程开发20年12 分钟前
C#全面超越JAVA,主要还是跨平台用的人少
java·c#·.net·跨平台
小信啊啊14 分钟前
Go语言切片slice
开发语言·后端·golang
阿华hhh16 分钟前
Linux系统编程(标准io)
linux·开发语言·c++
南_山无梅落30 分钟前
9.Python3集合(set)增删改查和推导式
java·开发语言
sg_knight1 小时前
拥抱未来:ECMAScript Modules (ESM) 深度解析
开发语言·前端·javascript·vue·ecmascript·web·esm
爱笑的眼睛111 小时前
超越MSE与交叉熵:深度解析损失函数的动态本质与高阶设计
java·人工智能·python·ai
程序喵大人1 小时前
推荐个 C++ 练习平台
开发语言·c++·工具推荐
全靠bug跑1 小时前
Spring Cloud OpenFeign 实战三部曲:快速集成 · 连接池优化 · 客户端抽取
java·spring boot·openfeign
阿里嘎多学长1 小时前
2025-12-16 GitHub 热点项目精选
开发语言·程序员·github·代码托管