位置: 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开发基础教程的心得)

  • 手机淘宝的安全中心在哪里(手机淘宝的安全性高吗)

    手机淘宝的安全中心在哪里(手机淘宝的安全性高吗)

  • 表格怎么把井号变数字(做表格单元格里面井号怎么变成数字)

    表格怎么把井号变数字(做表格单元格里面井号怎么变成数字)

  • 享做笔记如何删除页面(享做笔记如何删除一页)

    享做笔记如何删除页面(享做笔记如何删除一页)

  • 抖音关闭活跃状态对方还能看到吗(抖音关闭活跃状态已读对方消息会显示吗)

    抖音关闭活跃状态对方还能看到吗(抖音关闭活跃状态已读对方消息会显示吗)

  • 机顶盒上的光信号为什么会亮红灯(机顶盒上的光信号亮红灯怎么解决)

    机顶盒上的光信号为什么会亮红灯(机顶盒上的光信号亮红灯怎么解决)

  • 一加x手机上市时间(一加新款手机什么时候上市)

    一加x手机上市时间(一加新款手机什么时候上市)

  • 13.5英寸屏幕多大(13.3寸屏幕是多少cm)

    13.5英寸屏幕多大(13.3寸屏幕是多少cm)

  • 屏蔽手机的主要方法包括(屏蔽手机的主要原因)

    屏蔽手机的主要方法包括(屏蔽手机的主要原因)

  • 英特尔和酷睿有什么区别?(英特尔和酷睿有什么不同)

    英特尔和酷睿有什么区别?(英特尔和酷睿有什么不同)

  • 华为p40开发者选项怎么打开(华为P40开发者选项怎么打开模拟位置)

    华为p40开发者选项怎么打开(华为P40开发者选项怎么打开模拟位置)

  • 什么是微云台(什么是微云台?)

    什么是微云台(什么是微云台?)

  • 苹果美版充电器和国行一样吗(苹果美版充电器可以充国行手机吗)

    苹果美版充电器和国行一样吗(苹果美版充电器可以充国行手机吗)

  • 微信小程序审核需要多久(微信小程序审核通过后怎么发布)

    微信小程序审核需要多久(微信小程序审核通过后怎么发布)

  • 二级标题要加句号吗(二级标题要加逗号吗)

    二级标题要加句号吗(二级标题要加逗号吗)

  • 为什么qq自动回复不起作用(为什么qq自动回复经常失效)

    为什么qq自动回复不起作用(为什么qq自动回复经常失效)

  • 荣耀v30pro是三防手机吗(荣耀v30pro原装手机壳防摔吗)

    荣耀v30pro是三防手机吗(荣耀v30pro原装手机壳防摔吗)

  • 手机开免提对方听不到声音怎么回事(手机开免提对方听不见不开免提正常)

    手机开免提对方听不到声音怎么回事(手机开免提对方听不见不开免提正常)

  • 苹果手机能转移软件吗(苹果手机能转移微信聊天记录)

    苹果手机能转移软件吗(苹果手机能转移微信聊天记录)

  • 淘宝收货后多久自动好评(淘宝收货后多久可以开发票)

    淘宝收货后多久自动好评(淘宝收货后多久可以开发票)

  • 微信视频怎么发快手上(微信视频怎么发到视频号)

    微信视频怎么发快手上(微信视频怎么发到视频号)

  • 移动如何修改手机服务密码(移动怎么修改)

    移动如何修改手机服务密码(移动怎么修改)

  • NLP:自然语言处理技术领域的代表性算法概述(技术迭代路线图/发展时间路线)、四大技术范式变迁概述(统计时代→大模型时代)、四个时代的技术方法论探究(少数公司可承担的训练成本原因)之详细攻略(nlp自然语言处理框架)

    NLP:自然语言处理技术领域的代表性算法概述(技术迭代路线图/发展时间路线)、四大技术范式变迁概述(统计时代→大模型时代)、四个时代的技术方法论探究(少数公司可承担的训练成本原因)之详细攻略(nlp自然语言处理框架)

  • 【学vue跟玩一样】快速学会常用指令及如何理解生命周期(vue好不好学)

    【学vue跟玩一样】快速学会常用指令及如何理解生命周期(vue好不好学)

  • 房地产预缴增值税计算方式
  • 小规模纳税人进项发票怎么做账
  • 企业存款利息收入缴纳企业所得税吗
  • 实收资本印花税怎么申报税目
  • 租赁设备损毁赔偿案例
  • 按季度支付贷款利息权责发生制
  • 别墅一般送车库吗
  • 购销合同印花税优惠政策
  • 福利费进项税可以抵扣
  • 期初余额什么时候在借方什么时候在贷方
  • 存货取得长期股权投资
  • 应交增值税为什么是销项减进项
  • 固定资产预计净残值可以为0吗
  • 员工替公司垫付的费用还没有报销就被开除了
  • 营改增后增值税暂行条例实施细则
  • 小规模咨询费税率是多少
  • 有形动产租赁印花税税率是多少
  • 所得税汇算政策
  • 销售成本结转账务处理
  • 企业为员工购买社保缴费标准
  • Win10系统cpu性能如何调高 Win10把cpu性能调到极佳的方法
  • 登陆对话框不能输入
  • 刚毕业的学生可以买学生票吗
  • 文本模式是什么意思?
  • win10版本1909和22h2
  • 销售产品应交的消费税分录
  • 集团关联企业间关联交易对账单
  • 怎么理解php语言
  • php一个文件搞定两个文件
  • 新成立公司建账
  • frameworks
  • css3题目
  • chat的用法及短语
  • speedtest教程
  • php加密zend
  • 工程公司收到工程款会计分录
  • 折扣和佣金合法的两个条件是什么?
  • java同步操作
  • 增值税小规模纳税人减免增值税政策
  • java中file的用法
  • MongoDB的mongo shell常用操作方法及操作脚本笔记
  • 单位购买预付卡可以用现金吗
  • 百万级别数据库mysql
  • SqlServer中用exec处理sql字符串中含有变量的小例子
  • 委托银行贷款利息发票谁提供
  • 银行存款余额调节表编制
  • 其他应收款如何计提减值准备
  • 待报解预算收入怎么做分录
  • 结转损益类科目余额
  • 金税三期升级功能2020
  • 企业安装电子监控收费吗
  • 买二手办公用品
  • 预收账款是否要交说
  • 原始凭证分类的依据有什么
  • 临时人员是什么
  • 退回拨款会计分录怎么做
  • centos6.2安装
  • sql数据采集
  • sql server设置主键primary key
  • sql server启动不了 错误2
  • u盘启动盘如何克隆另外u盘
  • window10预览版
  • vc运行程序exe停止工作怎么办
  • centos查看inode
  • win8关机立马自动重启
  • 应用程序发生异常如何解决
  • 手机弹窗游戏
  • cocos2djs
  • material design怎么用
  • shell获取文件内容给变量
  • vue实现滚动条
  • unity脚本编写教程
  • node.js使用教程
  • js闭包的用处
  • sql怎么增删改
  • 国家税务总局辽宁省税务局
  • 税收征收管理与税收大数据分析
  • 查册证明怎么自动生成
  • 税务总局在贯彻落实意见任务分工中
  • 汽车燃油税每年要交吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设