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

运行结果

相关推荐
爬山算法14 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty72514 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎14 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄14 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
YUJIANYUE15 小时前
PHP纹路验证码
开发语言·php
忆~遂愿15 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds15 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化
仟濹15 小时前
【Java基础】多态 | 打卡day2
java·开发语言
孞㐑¥15 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
Re.不晚15 小时前
JAVA进阶之路——无奖问答挑战2
java·开发语言