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

  • 华为nova9pro能拍月亮吗(华为nova9pro能拍星空吗)

    华为nova9pro能拍月亮吗(华为nova9pro能拍星空吗)

  • 微信朋友圈怎么发长图连着的照片(微信朋友圈怎么编辑修改)

    微信朋友圈怎么发长图连着的照片(微信朋友圈怎么编辑修改)

  • ios14 iphone6s可以用吗(ios14.5苹果6s可以吗)

    ios14 iphone6s可以用吗(ios14.5苹果6s可以吗)

  • SPN一AL00什么型号(spn-al00)

    SPN一AL00什么型号(spn-al00)

  • oppo手机如何恢复旧系统(oppo手机如何恢复删除的照片和视频)

    oppo手机如何恢复旧系统(oppo手机如何恢复删除的照片和视频)

  • 应用分身是什么意思呢(应用分身是什么时候开始的软件)

    应用分身是什么意思呢(应用分身是什么时候开始的软件)

  • 锂电池一般能用多少年(锂电池和铅酸电池哪个好一点)

    锂电池一般能用多少年(锂电池和铅酸电池哪个好一点)

  • 华为nova7se什么时候出的(华为nova7se什么屏幕)

    华为nova7se什么时候出的(华为nova7se什么屏幕)

  • 哪个模块能观察出硬盘使用过的时间和次数(哪个模块能观察出硬盘使用过的时间)

    哪个模块能观察出硬盘使用过的时间和次数(哪个模块能观察出硬盘使用过的时间)

  • 固态坏了有办法修复吗(固态坏了有什么症状)

    固态坏了有办法修复吗(固态坏了有什么症状)

  • oppobreeno怎么语音唤醒(oppobreeno语音助手怎么唤醒)

    oppobreeno怎么语音唤醒(oppobreeno语音助手怎么唤醒)

  • air1和air2有什么区别(air1和air2有什么区别平板)

    air1和air2有什么区别(air1和air2有什么区别平板)

  • 美团怎么给异地订外卖(美团怎么给异地点餐点外卖)

    美团怎么给异地订外卖(美团怎么给异地点餐点外卖)

  • oppo手机上面的hd怎么关(oppo手机上面的圆圈怎么去掉)

    oppo手机上面的hd怎么关(oppo手机上面的圆圈怎么去掉)

  • 华为应用内支付在哪(如何开启华为应用内支付)

    华为应用内支付在哪(如何开启华为应用内支付)

  • vivoy93的语音助手在哪里找(vivoy93的语音助手叫什么名字)

    vivoy93的语音助手在哪里找(vivoy93的语音助手叫什么名字)

  • 苹果11怎么拍照(苹果11怎么拍照显示拍摄时间)

    苹果11怎么拍照(苹果11怎么拍照显示拍摄时间)

  • iphone7plus支持5v2a吗(iphone7plus支持volte吗)

    iphone7plus支持5v2a吗(iphone7plus支持volte吗)

  • xls表格怎么制作(xls表格怎么制作选择题然后直接生成条形图表)

    xls表格怎么制作(xls表格怎么制作选择题然后直接生成条形图表)

  • 怎么解决快手视频模糊(怎么解决快手视频卡顿)

    怎么解决快手视频模糊(怎么解决快手视频卡顿)

  • 手机在线和4g在线有什么区别(手机在线和4g在线和wifi在线有什么区别)

    手机在线和4g在线有什么区别(手机在线和4g在线和wifi在线有什么区别)

  • 美团商家相册怎么弄的(美团商家相册怎么上传视频)

    美团商家相册怎么弄的(美团商家相册怎么上传视频)

  • vue3 自定义全局loading组件 (PC和移动端都非常适用)(vue3全局属性)

    vue3 自定义全局loading组件 (PC和移动端都非常适用)(vue3全局属性)

  • 税收筹划的内容主要包括
  • 企业所得税如何规避
  • 每月工资不一样怎么交党费
  • 企业运输没有发票
  • 可以自己制作的商品
  • 季报现金流量表是必报表吗
  • 未开票收入下月开票怎么做分录
  • 账簿登记的基本要求
  • 房屋租赁费如何计提
  • 未实际处置资产怎么处理
  • 公司开业前期费用处理
  • 公司股东投资是负债吗
  • 发放工资比计提工资少了
  • 部门独立核算管理制度
  • 代收代付如何进行账务处理?
  • 公司和别人合伙违法吗
  • 营改增后场地租赁税率
  • 农场管委会是什么性质单位
  • 正在注销的公司微信收的款怎么追回
  • 销售佣金的税率怎么算
  • 上季度多交的增值税怎么做账
  • 资产总额和净资产总额的区别
  • 出租房产业务企业所得税如何处理?
  • 在会计上跨季度增值税专用发票怎么进行红冲?
  • 未分配利润转入本年利润
  • 车辆购置税退税条件
  • 实收资本未到位借款利息可以税前扣除吗
  • 地税定额发票还要交税吗
  • 工资扣员工的罚款入什么科目
  • 存货折扣怎样做账
  • 多系统设置
  • 咨询服务费需要交印花税吗
  • 澳大利亚太平洋银行
  • 存货周转率公式怎么算
  • 公司没有营业额零报税的后果
  • 税收原则的含义
  • 零息债券利息
  • 应收款余额在借方什么意思
  • 收回已确认的坏账准备为什么在贷方
  • 非营利组织增值税
  • easyui分页传递表单参数
  • php上传文件类型
  • winform开发技术有哪些
  • yolo v5训练
  • 购入固定资产应该怎么做账
  • 织梦cms不更新了吗
  • 营业执照类型的区别是什么
  • mysql启动器
  • 日常收集整理常用工具
  • 财务状况简单说明
  • 购买设备配件
  • 外商投资企业 外资企业
  • 固定资产盘盈为何要交所得税
  • 注册公司注册公司
  • 可转换公司债券例题
  • 单位工程可以是一栋楼吗
  • 利润与所有者权益的区别
  • 行政单位合并财务怎么办
  • 保险发票计入什么科目
  • 企业给职工发放的自产产品应作为职工福利费管理
  • 电子银行承兑汇票到期怎么兑现
  • 资产报废需要税费吗
  • 旅客运输进项税申报漏了
  • 社保系统个人信息
  • MySQL:Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEM
  • 数据库复制数据sql语句
  • SQLServer Top语句参数化方法
  • sql server?
  • ARP欺骗攻击原理
  • 离线方式快速安装在哪里
  • centos破解密码命令
  • 黑客怎样入侵别人手机
  • win8创建我的电脑
  • 代码结构说明书
  • ftp自动上传脚本怎么用
  • javascript控制语句
  • js自定义指令
  • javascript字符串操作函数
  • python批量填表
  • 浅谈Jquery中Ajax异步请求中的async参数的作用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设