文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Jasypt加解密

2023-08-17 18:00

关注

​ 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 是必须的,配置项有:

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

引入依赖

    com.github.ulisesbocchio    jasypt-spring-boot-starter    2.1.2    com.github.ulisesbocchio    jasypt-spring-boot    2.0.0

编写配置

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

加密和解密

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

@Autowiredprivate StringEncryptor stringEncryptor;@Testpublic void test() {    String secret = stringEncryptor.encrypt("root");    String decrypt = stringEncryptor.decrypt(secret);    System.out.println("password明文:" + decrypt);    System.out.println("password密文:" + secret);}@Testpublic 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);}
public class JasyptUtil {    private static final String PBEWITHMD5ANDDES = "PBEWithMD5AndDES";    private static final String PBEWITHHMACSHA512ANDAES_256 = "PBEWITHHMACSHA512ANDAES_256";        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);    }        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);    }        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);    }        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️⃣加密命令,参数说明:

命令: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: PBEWithMD5AndDESinput: rootpassword: 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: PBEWithMD5AndDESinput: muiQcX1aXcMACgnq57hDDA==password: hello----OUTPUT----------------------root

使用密文:ENC(密文)

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

spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/test    username: root    password: ENC(muiQcX1aXcMACgnq57hDDA==)  # 明文=root

2️⃣重要内容加密

my:  username: ENC(muiQcX1aXcMACgnq57hDDA==) # 明文=root  password: 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️⃣在程序启动时,配置参数传入。

-Djasypt.encryptor.password=cf150b74e4824146ad76e9ebe757ba76

在这里插入图片描述

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

其他

jasypt:  encryptor:    property:      prefix: "P["      suffix: "]"      my:  username: P[muiQcX1aXcMACgnq57hDDA==] # 明文=root  password: P[muiQcX1aXcMACgnq57hDDA==] # 明文=root

来源地址:https://blog.csdn.net/C_Karen/article/details/127803058

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯