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

  • 房产税从价改从租,多缴税款要加收滞纳金吗
  • 商品流通企业都交什么税
  • 小微企业城建税及附加减半
  • 出口退税不退税则征税
  • 小型微利企业认定标准2023年
  • 备用金三栏式明细账图片
  • 销售费用现金支付
  • 附加税按实际缴纳计提吗
  • 工资退回怎么处理
  • 挂靠的项目税务局怎么交地税?
  • 旅游服务费计入什么费用
  • 公司的私账合法吗
  • 6位开票代码是什么意思
  • 合伙人未出资能成为合伙人吗
  • 进项税和销项税税率一样吗
  • 个体户收入总额是含税还是不含税
  • 新金融工具准则投资收益
  • 企业残疾人保障金
  • 支票入账怎么填写
  • 个人名义去税务局开票
  • 员工承担补缴社保的责任
  • 技术先进型企业认定
  • 企业所得表怎么填写
  • 飞鱼星路由器信号有点差怎么办
  • 手把手教你win7换主板不重装系统的方法
  • 社会保险生育险能报多少
  • 公司旅游费用怎么入账
  • linux太卡顿
  • 加班餐费税前扣除问题
  • 股东未实缴资本,因为经营困难借给公司钱,可以要求返还
  • 微信第三方登录信息修改
  • mysql_escape_string()函数用法分析
  • 危废处理需要哪些手续
  • elementui动态表单数据回显
  • ajax和axios区别
  • 固定资产类别有哪些
  • 2022年最新公务接待用餐标准
  • 管理费用增加记哪方
  • 企业所得税核查报告
  • 外包员工食堂怎么做账
  • 配置windows update
  • SQL Server 中 RAISERROR 的用法详细介绍
  • 个人所得税其他扣除300一个月
  • 更改Mysql root用户密码
  • 一次还本付息债券定价公式
  • 什么叫政府补贴学位生
  • 红冲以前年度的费用怎么做账
  • 代扣代缴附加税减免政策文件
  • 账务处理程序的定义
  • 航空货运票据可以抵扣吗
  • 结转销售成本的分录
  • 固定资产清理贷方余额是什么意思
  • 如何从财务报表中分析企业偿债能力
  • 怎样计算债券利息
  • sql server默认实例
  • freebsd10安装教程
  • Windows 2003 SP2 简体中文版下载地址
  • CentOS7的hostnamectl命令使用详解
  • WorkFlowTray.exe是什么进程
  • winxp如何禁用u盘
  • windows 进度条
  • linux链接分为什么和什么
  • win10系统如何禁用u盘
  • js获取数组元素个数
  • 详解IWinter 一个路由转控制器的 Nodejs 库
  • 用于播放html5视频文件的正确
  • Android OpenGL ES(一)----必备知识
  • 写个置顶
  • ftp远程桌面
  • unity rpg插件
  • php和python有什么区别
  • python移动目标跟踪
  • js复制对象的值
  • 简述python语言
  • python怎么用数组
  • unity中如何修改prefab
  • android获取手机的基本信息
  • js 不用var
  • 机打发票真伪查询
  • 预缴增值税是否要预缴城建税及附加
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设