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

  • 个人独资企业和个体工商户的税收区别
  • 印花税申报是含税收入还是不含税收入
  • 娱乐行业缴纳的税收
  • 社保的滞纳金放什么科目
  • 应付票据和应付债券
  • 增值税申报时有0.1元差额,怎么申报
  • 专用发票网上勾选不了
  • 城建税纳税申报表
  • 电子发票手动导出的发票在哪里
  • 外单位人员报销差旅费会计分录
  • 存货盘点科目
  • 房地产行业预缴税款
  • 销售商品发生的运费计入什么科目
  • 给员工缴纳保险
  • 电商公司怎么开发票
  • 企业完税凭证入账后怎么办理退税?
  • 销售类合同审核要点
  • 物业公司收的预存水费不够抵减怎么交税
  • 营业成本主要包括
  • 个税7月申报7月怎么填
  • 季度预缴所得税可以弥补以前亏损吗
  • 固定资产净残值是什么意思
  • 公司购买理财的好处有哪些
  • 其他流动负债包含
  • 主营业务收入和营业收入的区别
  • 无u刷bios一直闪
  • 国家减免税款怎么申请
  • php运用于哪些领域
  • os x yosemite dp5下载地址 os x 10.10 dp5更新内容
  • shadowbar.exe - shadowbar是什么进程 有何作用
  • 进出口商品的税率是多少
  • 附有退回条件的销售商
  • php静态页面实现搜索功能
  • element-ui dialog
  • vue生命周期钩子函数
  • 微信小程序开发平台
  • 基于什么意思
  • lstm输出多个预测值
  • 促销赠品的会计处理
  • 如何在idea上运行python
  • 机械租赁税率是多少?
  • day03-CSS
  • 织梦数据库在哪
  • 用pullout造句
  • 运输发票开具条件
  • 城市维护建设税是什么意思
  • 赔绿化损失费的法律规定
  • mongodb聚合函数详解
  • 万元版和十万元版发票图片
  • 逐期增长量与累计增长量
  • 税盘清卡清不了怎么办
  • sql server定时作业
  • 金税四期可以查到闭环开票信息吗
  • 流转税怎么核算
  • 销售免税项目
  • 商业承兑汇票怎么做账
  • 实际验收入库是什么科目
  • 固定资产清理账务处理流程
  • 缴纳文化事业建设费的单位应按照提供广告服务
  • 公司员工支出
  • 小微企业未开票收入怎么申报
  • 接受非货币性资产捐赠入账价值
  • 一般纳税人厂房租赁增值税税率是多少
  • 正确使用气体钢瓶的原则
  • 微软安全公告
  • Windows 2008 R2的C盘空间不够的解决方法
  • 系统审核策略配置
  • Win10 Mobile build 14393.189安装与上手体验视频
  • 如何将windows 10
  • nodejs readdir
  • unity ugui合批
  • 安卓的引导式访问叫什么
  • 在python中的用法
  • javascript巧用eval函数组装表单输入项为json对象的方法
  • 安卓的生命周期方法
  • 进口退税能退税吗现在
  • 青霉素过敏是因为提纯不好吗
  • 上海房产税免税面积怎么算
  • 招投标文件未规定怎么办
  • 目前我国现行法规规定的职业病范围共有几大类几种
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设