位置: IT常识 - 正文

Jasypt加解密(jasypt加密解密)

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

推荐整理分享Jasypt加解密(jasypt加密解密),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:jasypt.encryptor.password,jasypt加解密异常,Jasypt加解密,jasypt加密解密,jasypt加密解密,jasypt加解密异常,Jasypt加解密,jasypt加解密异常,内容如对您有帮助,希望把文章链接给更多的朋友!

​ Jasypt也即Java Simplified Encryption是Sourceforge.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 VALUEjasypt.encryptor.passwordTrue-jasypt.encryptor.algorithmFALSEPBEWithMD5AndDESjasypt.encryptor.keyObtentionlterationsFALSE1000jasypt.encryptor.poolSizeFALSE1jasypt.encryptor.providerNameFALSESunJCEjasypt.encryptor.providerClassNameFALSEnulljasypt.encryptor.saltGeneratorClassnameFALSEorg.jasypt.salt.RandomSaltGeneratorjasypt.encryptor.ivGeneratorClassnameFALSEorg.jasypt.salt.NoOplVGeneratorjasypt.encryptor.stringOutputTypeFALSEbase64jasypt.encryptor.proxyPropertySourcesFALSEfalse

2️⃣新版

keyREQUIREDDEFAULT VALUEjasypt.encryptor.passwordTrue-jasypt.encryptor.algorithmFALSEPBEWITHHMACSHA512ANDAES_256jasypt.encryptor.key-obtention-iterationsFALSE1000jasypt.encryptor.pool-sizeFALSE1jasypt.encryptor.provider-nameFALSESunJCEjasypt.encryptor.provider-class-nameFALSEnulljasypt.encryptor.salt-generator-classnameFALSEorg.jasypt.salt.RandomSaltGeneratorjasypt.encryptor.iv-generator-classnameFALSEorg.jasypt.iv.RandomIvGeneratorjasypt.encryptor.string-output-typeFALSEbase64jasypt.encryptor.proxy-property-sourcesFALSEfalsejasypt.encryptor.skip-property-sourcesFALSEempty list

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

2.1.2版本默认加密方式为:PBEWithMD5AndDES3.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程序获取密文和解密@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);}/** * StandardPBEStringEncryptor对象的setPassword方法设置盐值(密钥) */@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);}自己封装的工具类/** * 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.3Jasypt加解密(jasypt加密解密)

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: 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️⃣在程序启动时,配置参数传入。

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

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

其他不自定义加密类的话,默认算法为 PBEWithMD5AndDES多次生成,每次生成的密码不一样。不同的密码序列,解密却可以一样。ENC前缀可改变,即自定义格式:需要添加配置jasypt: encryptor: property: prefix: "P[" suffix: "]"my: username: P[muiQcX1aXcMACgnq57hDDA==] # 明文=root password: P[muiQcX1aXcMACgnq57hDDA==] # 明文=root
本文链接地址:https://www.jiuchutong.com/zhishi/299426.html 转载请保留说明!

上一篇:猿创征文|前端之行,任重道远(来自大三学长的万字自述)(猿创设计科技有限公司)

下一篇:python web开发基础(Python web开发基础教程的心得)

  • 办理出口退税时间要求
  • 报税怎么操作流程图
  • 小微企业月开票超15万季度未超45万
  • 科技公司技术服务费计入什么科目
  • 如果零申报
  • 物业公司外包保安死亡
  • 抵扣发票未申报
  • 工程公司后期维保费用如何入账?
  • 房屋所有权变更登记证书
  • 企业所得税中的不征税收入有哪些
  • 企业核税需要什么资料
  • 税务管理相关知识
  • 物业公司小规模纳税人如何报税
  • 处于成熟期的企业其预算模式的特点是以什么为起点
  • 金蝶K3打印凭证下的过账和制单怎么新增名字
  • 当期所得税费用与递延所得税费用
  • 外商企业需要交企业所得税吗
  • 增值税普通发票怎么开
  • 事业单位接受捐赠的货币资金在财务会计中确认捐赠收入
  • 免抵退不得免征和抵扣是什么意思
  • 税法中的视同行为如何开具发票
  • 小公司做帐
  • 进项加计扣除如何做分录
  • 质量扣款入什么科目
  • vue可视化面板怎么打开
  • 个人签订借款合同
  • 食堂现金管理办法
  • php操作mysql数据库
  • php开发文档
  • 房地产企业预缴增值税如何申报
  • echarts柱状图坐标轴
  • vuexl
  • vue watch和computed
  • 礼品赠送纳税标准
  • python怎么生成随机矩阵
  • 连带责任担保会被拘留吗
  • 建筑公司收到的劳务费发票
  • 发票明细清单怎么打印
  • 余额百分比法计提坏账准备
  • 医疗机构销售药品是否征收增值税
  • 委外加工怎么盘点
  • 税控盘解锁操作流程
  • 其他应收款利息按什么计算
  • 个体工商户税种及税率
  • 超市的收银小票丢了可以要求重新打印一张吗
  • 个人独资企业费用扣除
  • 有外经证还要缴纳企业所得税吗
  • 代扣代缴增值税怎么做账
  • 长期借款涉及哪些账户
  • 选用劳务派遣人员
  • 建筑行业收到工程款延期付款利息需不需要开票
  • 收到股东投资款需要交什么税
  • 银行取现怎么预约
  • 所得税汇算清缴需要调增的项目
  • 发票报销是什么流程
  • 明细账的登记方向与总账的登记方向是一致的
  • 残保金新企业用交吗
  • sql not in 与not exists使用中的细微差别
  • win7系统一键还原方法
  • win7系统蓝牙搜索不到设备
  • 开机停在american megatrends
  • centos分区命令
  • pcalc是什么软件
  • unity如何合并物体
  • 解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
  • qt for 安卓
  • using Net::SSH2 shell 的二个方法
  • 使用多进程web
  • 批处理 !!
  • for语句中的++i
  • javascript教程chm
  • 置顶聊天的人怎么不见了
  • jquery生成元素
  • 省市区json
  • jQuery中each()、find()和filter()等节点操作方法详解(推荐)
  • 重庆沙坪坝区沙磁巷幼儿园
  • 白云区嘉禾税务局地址
  • 小型贸易企业公司有哪些
  • 重庆市深化新时代教育评价改革幼儿园
  • 2020年山东录取人数
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设