Jasypt加解密

article/2025/10/9 0:48:35

Jasypt加密

  • Jasypt加密
  • 引言
  • 介绍
  • 整合SpringBoot
    • 引入依赖
    • 编写配置
    • 加密和解密
      • 通过Java程序获取密文和解密
      • 通过jasypt中jar包程序获取密文
      • 使用密文:ENC(密文)
    • 异常问题
      • JCE权限问题
      • yml中带有@引起的问题
    • 关于盐值(密钥)配置设置
    • 其他

Jasypt加密

引言

​ Jasypt也即Java Simplified EncryptionSourceforge.net上的一个开源项目。Jasypt 1.4的新特性包括:加密属性文件(encryptable properties files)、Spring Framework集成、加密Hibernate数据源配置、新的命令工具、URL加密的Apache wicket集成以及升级文档。

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

​ Jasypt还符合RSA标准的基于密码的加密,并提供了无配置加密工具以及新的、高可配置标准的加密工具。

​ 官网:http://www.jasypt.org/

介绍

​ 配置信息只有 jasypt.encryptor.password 是必须的,配置项有:

  • 注意:
    • jasypt.encryptor.saltGeneratorClassname新版和旧版属性不一致
    • jasypt.encryptor.algorithm加密算法不一致

1️⃣旧版

keyREQUIREDDEFAULT VALUE
jasypt.encryptor.passwordTrue-
jasypt.encryptor.algorithmFALSEPBEWithMD5AndDES
jasypt.encryptor.keyObtentionlterationsFALSE1000
jasypt.encryptor.poolSizeFALSE1
jasypt.encryptor.providerNameFALSESunJCE
jasypt.encryptor.providerClassNameFALSEnull
jasypt.encryptor.saltGeneratorClassnameFALSEorg.jasypt.salt.RandomSaltGenerator
jasypt.encryptor.ivGeneratorClassnameFALSEorg.jasypt.salt.NoOplVGenerator
jasypt.encryptor.stringOutputTypeFALSEbase64
jasypt.encryptor.proxyPropertySourcesFALSEfalse

2️⃣新版

keyREQUIREDDEFAULT VALUE
jasypt.encryptor.passwordTrue-
jasypt.encryptor.algorithmFALSEPBEWITHHMACSHA512ANDAES_256
jasypt.encryptor.key-obtention-iterationsFALSE1000
jasypt.encryptor.pool-sizeFALSE1
jasypt.encryptor.provider-nameFALSESunJCE
jasypt.encryptor.provider-class-nameFALSEnull
jasypt.encryptor.salt-generator-classnameFALSEorg.jasypt.salt.RandomSaltGenerator
jasypt.encryptor.iv-generator-classnameFALSEorg.jasypt.iv.RandomIvGenerator
jasypt.encryptor.string-output-typeFALSEbase64
jasypt.encryptor.proxy-property-sourcesFALSEfalse
jasypt.encryptor.skip-property-sourcesFALSEempty list

3️⃣需要注意加解密的类型一致

2.1.2版本默认加密方式为:PBEWithMD5AndDES
3.0.3版本默认加密方式为:PBEWITHHMACSHA512ANDAES_256
当引入3.0.3依赖,却没有添加相关jasypt加解密配置,而密文通过【PBEWithMD5AndDES】来加密,启动会报错。
需要切换为【PBEWITHHMACSHA512ANDAES_256】方式进行。

整合SpringBoot

引入依赖

<!-- 方式1:引入 jasypt-spring-boot-starter -->
<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.2</version>
</dependency><!-- 方式2:引入 jasypt-spring-boot  需在启动类添加@EnableEncryptableProperties -->
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot</artifactId><version>2.0.0</version>
</dependency>

编写配置

jasypt:encryptor:algorithm: PBEWithMD5AndDES # 加密算法password: cf150b74e4824146ad76e9ebe757ba76 # 使用加密密钥

加密和解密

通过Java程序获取密文和解密

@Autowired
private StringEncryptor stringEncryptor;@Test
public void test() {String secret = stringEncryptor.encrypt("root");String decrypt = stringEncryptor.decrypt(secret);System.out.println("password明文:" + decrypt);System.out.println("password密文:" + secret);
}/*** StandardPBEStringEncryptor对象的setPassword方法设置盐值(密钥)*/
@Test
public void test(){StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();encryptor.setPassword("hello");//设置加密盐值String secret = stringEncryptor.encrypt("root");String decrypt = stringEncryptor.decrypt(secret);System.out.println("password明文:" + decrypt);System.out.println("password密文:" + secret);
}
  • 自己封装的工具类
/*** Jasypt加密解密工具类*/
public class JasyptUtil {private static final String PBEWITHMD5ANDDES = "PBEWithMD5AndDES";private static final String PBEWITHHMACSHA512ANDAES_256 = "PBEWITHHMACSHA512ANDAES_256";/*** @param text  待加密原文* @param crack 盐值(密钥)* @return 加密后的字符串* @Description: Jasypt加密(PBEWithMD5AndDES)*/public static String encryptWithMD5(String text, String crack) {//1.创建加解密工具实例StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();//2.加解密配置EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();config.setAlgorithm(PBEWITHMD5ANDDES);config.setPassword(crack);encryptor.setConfig(config);//3.加密return encryptor.encrypt(text);}/*** @param text  待解密原文* @param crack 盐值(密钥)* @return 解密后的字符串* @Description: Jasypt解密(PBEWithMD5AndDES)*/public static String decryptWithMD5(String text, String crack) {//1.创建加解密工具实例StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();//2.加解密配置EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();config.setAlgorithm(PBEWITHMD5ANDDES);config.setPassword(crack);encryptor.setConfig(config);//解密return encryptor.decrypt(text);}/*** @param text  待加密的原文* @param crack 盐值(密钥)* @return 加密后的字符串* @Description: jasypt 加密(PBEWITHHMACSHA512ANDAES_256)*/public static String encryptWithSHA512(String text, String crack) {//1.创建加解密工具实例PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();//2.加解密配置SimpleStringPBEConfig config = new SimpleStringPBEConfig();config.setPassword(crack);config.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);// 为减少配置文件的书写,以下都是 Jasypt 3.x 版本,配置文件默认配置config.setKeyObtentionIterations("1000");config.setPoolSize("1");config.setProviderName("SunJCE");config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");config.setStringOutputType("base64");encryptor.setConfig(config);//3.加密return encryptor.encrypt(text);}/*** @param text  待解密原文* @param crack 盐值(密钥)* @return 解密后的字符串* @Description: jasypt 解密(PBEWITHHMACSHA512ANDAES_256)*/public static String decryptWithSHA512(String text, String crack) {//1.创建加解密工具实例PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();//2.加解密配置SimpleStringPBEConfig config = new SimpleStringPBEConfig();config.setPassword(crack);config.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);// 为减少配置文件的书写,以下都是 Jasypt 3.x 版本,配置文件默认配置config.setKeyObtentionIterations("1000");config.setPoolSize("1");config.setProviderName("SunJCE");config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");config.setStringOutputType("base64");encryptor.setConfig(config);//3.解密return encryptor.decrypt(text);}
}

通过jasypt中jar包程序获取密文

1️⃣添加依赖,下载好jar包到本地maven仓库后,cmd进入jasypt.jar包所在的目录

如个人本地目录:D:\Java\mvn_repository\org\jasypt\jasypt\1.9.3

2️⃣加密命令,参数说明:

  • input:需要加密的字段
  • password:加密盐值,用来进行加密
  • algorithm:加密方式,默认不写也行
命令:java -cp jasypt-1.9.3.jar  org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=hello algorithm=PBEWithMD5AndDES# 输出
----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.171-b11----ARGUMENTS-------------------
algorithm: PBEWithMD5AndDES
input: root
password: hello----OUTPUT----------------------
muiQcX1aXcMACgnq57hDDA==

3️⃣解密命令

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="aCEx6r9g2lBuGF8w/XU8wQ==" password=hello algorithm=PBEWithMD5AndDES#输出
----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.171-b11----ARGUMENTS-------------------
algorithm: PBEWithMD5AndDES
input: muiQcX1aXcMACgnq57hDDA==
password: hello----OUTPUT----------------------
root

使用密文:ENC(密文)

1️⃣如:数据库连接加密

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/testusername: rootpassword: ENC(muiQcX1aXcMACgnq57hDDA==)  # 明文=root

2️⃣重要内容加密

my:username: ENC(muiQcX1aXcMACgnq57hDDA==) # 明文=rootpassword: ENC(muiQcX1aXcMACgnq57hDDA==) # 明文=root

异常问题

JCE权限问题

org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption raised an exception. 
A possible cause is you are using strong encryption algorithms and you have not installed the Java 
Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files in this Java Virtual Machine# 解决方案:
查看是否是加解密类型不一致导致。
或者下载:https://www.oracle.com/java/technologies/javase-jce8-downloads.html
下载压缩包解压,将local_policy.jar和US_export_policy.jar替换(或粘贴进去)D:\Java\JDK8\jre\lib\security\路径下的jar包

yml中带有@引起的问题

yml中@是特殊字符, 含有@左右需要加单引号。
jasypt 自动加密整个文件的时候,会将单引号也当做密码的一部分,这样得到的密文肯定是错的。#解决方案:
直接将密码生成,然后再复制过去,不要带双引号。

关于盐值(密钥)配置设置

  • 存放位置

    • 工程内配置文件中
    • 内部代码中
    • 存放本地某处目录下的本地文件中
  • 传入盐值

    • 盐值明文存放到工程内配置文件存在安全风险。

    • 存放本地某处目录下的本地文件中(推荐)

    • 存放内部代码中。

    • 在程序启动时,配置参数传入。

1️⃣在程序启动时,配置参数传入。

  • 通过启动时传入密钥【Add VM options】
-Djasypt.encryptor.password=cf150b74e4824146ad76e9ebe757ba76

在这里插入图片描述

2️⃣命令行启动jar包时,传入命令

其他

  • 不自定义加密类的话,默认算法为 PBEWithMD5AndDES
  • 多次生成,每次生成的密码不一样。不同的密码序列,解密却可以一样。
  • ENC前缀可改变,即自定义格式:需要添加配置
jasypt:encryptor:property:prefix: "P["suffix: "]"my:username: P[muiQcX1aXcMACgnq57hDDA==] # 明文=rootpassword: P[muiQcX1aXcMACgnq57hDDA==] # 明文=root

http://chatgpt.dhexx.cn/article/NDWVNEXf.shtml

相关文章

微服务SpringBoot整合Jasypt加密工具

文章目录 一、Jasypt介绍二、Jasypt手动使用2.1 密码加密场景2.2 文本加密场景2.3 数值加密场景2.4 二进制数据加密场景 三、Jasypt整合SpringBoot四、生成环境启动无、参考文档 一、Jasypt介绍 Jasypt是Java加密工具包&#xff0c;能支持对密码的哈希加密&#xff0c;对文本和…

Springboot之Jasypt配置文件加密/解密

Jasypt配置文件加密/机密 一、Jasypt介绍二、Springboot整合Jasypt2.1 环境配置2.2 添加依赖2.3 添加Jasypt配置2.4 编写加/解密工具类2.5 修改配置文件2.5 如何进一步防止密码泄露2.5.1 自定义加密器2.5.3 加密盐值通过环境变量指定 文章系列 【一、Springboot之Jasypt配置文…

java中byte与int的转换原理

前些天遇到一个问题&#xff0c;byte[0] "A3"&#xff08;十六进制表示&#xff09; 但是在debug时显示的是 -93 &#xff0c;而如果直接赋值给int的变量也是-93.当然大部分人都知道这是不能直接赋值的&#xff0c;需要以下面的这种方式将byte转换成int&#xff1a;…

Java byte 转化为 String

1、Java 中 byte 转化为 String&#xff0c;代码如下 package nice.com.mian;import java.io.UnsupportedEncodingException;public class StringMain {public static void main(String[] args) throws Exception {byte[] bb {97,99,105,51,55};String str new String(bb, &…

Java byte[] 转 String的简单转换

简单的将byte[] 还原成了 String 值 [TOC] 代码&#xff1a; public class Test0719 {public static void main(String[] args) {String text "test";byte[] textBytes text.getBytes();String content byteToString(textBytes);System.out.println(textBytes &q…

java:int强制类型转换成byte

注&#xff1a;非常感谢评论的最佳戏子大佬指出了我的不足&#xff0c;已经进行修改 int强制类型转换成byte 一、基础知识二、int->byte方法一方法二 一、基础知识 int 在java中是32位&#xff0c; byte是8位 原码&#xff1a;就是二进制码&#xff0c;最高位为符号位&…

C#初级编程

Unity学习笔记——C#初级编程 一、Awake 和 Start二、Update 和 FixedUpdate三、启用和禁用组件四、SetActive、Active Self、Active in Hierarchy五、位置和旋转六、transform.lookAt(Transform target)七、线性插值八、Destroy九、GetButton 和 GetKey十、GetAxis十一、GetCo…

零基础怎样自学编程?新手如何学习编程?编程学习入门指南

对于编程&#xff0c;很多新手的第一感觉可能就是&#xff1a; 高深&#xff0c;难学。 学好编程&#xff0c;有的时候&#xff0c;可以把一些需要我们重复劳动的工作&#xff0c;自动化批量处理&#xff0c;为我们节省很多时间和精力。 对于一些学得比较深入的朋友来说&…

新手学计算机编程怎么入门 从哪学起

近些年有一种职业发展很快、人才需求量大、工资高&#xff0c;那就是程序员。他们的基本工作就是电脑编程&#xff0c;开发者各种各样的软件、APP&#xff0c;被很多人膜拜。如果你想成为一名程序员&#xff0c;有必要了解一下这些基本的电脑编程入门教程。 1计算机编程怎么入门…

代码编程教学入门

前言 代码编程是我们在现代能获得的最宝贵的技能之一&#xff0c;学会写代码不仅让我们在职业前景上更得心应手&#xff0c;而且还能让我们的大脑保持活跃和创造性&#xff0c;甚至我们还有机会创造出一些 awesome 的东西出来。 如果我们才刚刚开始&#xff08;或准备开始&am…

20道经典C语言编程题(初级)

编者按&#xff1a;以下20道题目为自己练习所写的代码&#xff0c;均已提交检测通过&#xff0c;其中有些题也许有更优的解法&#xff0c;所以写的不好望读者包涵&#xff0c;由于个人练习&#xff0c;所以没有写注释&#xff0c;有什么问题的地方&#xff0c;可以留言一起交流…

沈师 PTA 数据库题目及部分解析 第四章

判断题 1.在数据库安全性控制中&#xff0c;所有授予出去的权力在必要时都可以用REVOKE语句收回。 T 2.用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将“授权”的权限授予别人&#xff0c;因此称这样的存取控制是自主存取控制。 T 3.数据库的安全性是指保护数据…

编程题目+数据库题目总结(3)

目录 编程题1.字典中保存了一些股票代码&#xff08;键&#xff09;及价格&#xff08;值&#xff09;&#xff0c;用一行代码找出价格最高的股票&#xff0c;输出股票代码。(5分&#xff09;2.字典中保存了一些股票代码&#xff08;键&#xff09;及价格&#xff08;值&#x…

沈师 PTA 数据库题目及部分解析 第一章

判断题&#xff1a; 1.一个数据库只有一个模式和一个内模式。 T 2.数据模型是由数据结构、数据操作和完整性约束三部分组成的 T 3.由于数据库中的数据是不断更新的&#xff0c;因此关系模式是相对变化的。 F 解析&#xff1a;关系模式不会相对变化&#xff0c;变化的是实例 4.数…

【数据库题目复习】期末试卷 一、二

文章目录 试题一一、选择题二、填空题三、简答题四、设计题五、综合题 试题二一、选择题二、填空题三、简答题四、设计题五、综合题 试题一 一、选择题 1. 数据库系统的核心是&#xff08; B &#xff09; A&#xff0e;数据库 B&#xff0e;数据库管理系统 C&#xf…

【数据库题目复习】第7章 数据库设计

文章目录 一、选择题&#xff1a;二、填空三、应用 参考文章&#xff1a;https://blog.csdn.net/qq_46139801/article/details/117453449 知识点&#xff1a; &#xff08;1&#xff09;各子系统的E-R图之间的冲突主要有三类&#xff1a; 属性冲突、命名冲突和结构冲突。 &…

【力扣刷题总结】数据库题目按知识点分类总结

观前提示&#xff1a; 这个图先自行背诵至滚瓜烂熟。 文档中论述题目解题思路时没有特殊情况都按照上面的程序执行顺序为准&#xff0c;个别题也会以其他更自然的顺序讲解。 本文的知识点整理仅起提示作用&#xff0c;一些不常用功能、参数可能会遗漏&#xff0c;如需了解详细…

数据库题目之数据库设计

一、选择题 1、在数据库设计中&#xff0c;用E-R图来描述信息结构但不涉及信息在计算机中的表示&#xff0c;它是数据库设计的 阶段。 A&#xff0e;需求分析 B&#xff0e;概念设计 C&#xff0e;逻辑设计 D&#xff0e;物理设计 【答案&#xff1a;】B 2、在关系…

数据库常考大题

宝子们心心念念的数据库大题来啦~ 我已经整理好啦~你们根据目录找对应题目就好啦&#xff0c;嘿嘿~姐姐是不是还有点小贴心呢&#xff1f; &#x1f6f8; &#x1f30f; &#x1f318; • . ✯✯ ★ * &#x1f6f0; . • ★ • ▁▂▃▄▅▆▇▇▆▅▄▃▁▂▃. 目录…