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

运行结果

相关推荐
ytadpole4 小时前
揭秘xxl-job:从高可用到调度一致性
java·后端
玉衡子4 小时前
六、深入理解JVM执行引擎
java·jvm
每天进步一点_JL5 小时前
JVM 内存调优:到底在调什么?怎么调?
java·jvm·后端
yinke小琪5 小时前
说说Java 中 Object 类的常用的几个方法?详细的讲解一下
java·后端·面试
间彧8 小时前
Spring Boot项目中如何实现Redis分布式锁
java
掘金安东尼8 小时前
AI 应用落地谈起 ,免费试用 Amazon Bedrock 的最佳时机
java·架构
杨杨杨大侠8 小时前
案例03-附件E-部署运维
java·docker·github
杨杨杨大侠8 小时前
案例03-附件B-映射器实现
java·开源·github
杨杨杨大侠8 小时前
案例03-附件A-订单实体设计
java·开源·github
杨杨杨大侠8 小时前
案例03-附件C-性能优化
java·开源·github