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

  • 网络连接不可用什么原因(网络连接)(网络连接不可用-1009)

    网络连接不可用什么原因(网络连接)(网络连接不可用-1009)

  • 小米手机怎么把两张照片合成一张(小米手机怎么把下面三个键隐藏)

    小米手机怎么把两张照片合成一张(小米手机怎么把下面三个键隐藏)

  • 为什么双击微信图标打不开 双击微信图标打不开的解决办法(打开微信)

    为什么双击微信图标打不开 双击微信图标打不开的解决办法(打开微信)

  • 电子数字计算机工作最重要的特征是(电子数字计算机的运算对象是)

    电子数字计算机工作最重要的特征是(电子数字计算机的运算对象是)

  • vivox27人脸识别怎么设置(vivox21人脸识别)

    vivox27人脸识别怎么设置(vivox21人脸识别)

  • 键盘撤回的快捷键在哪(撤回键盘快捷键是什么)

    键盘撤回的快捷键在哪(撤回键盘快捷键是什么)

  • 微信封面怎么删除(微信封面怎么删除人)

    微信封面怎么删除(微信封面怎么删除人)

  • 苹果手机安装不了第三方软件(苹果手机安装不了微信是怎么回事)

    苹果手机安装不了第三方软件(苹果手机安装不了微信是怎么回事)

  • 华为手机微信运动步数不动的原因(华为手机微信运动怎么显示在桌面)

    华为手机微信运动步数不动的原因(华为手机微信运动怎么显示在桌面)

  • 蓝v认证是什么意思(蓝v认证是什么标志)

    蓝v认证是什么意思(蓝v认证是什么标志)

  • 微信三天可见是对所有人还是有选择性(微信三天可见是被删了吗)

    微信三天可见是对所有人还是有选择性(微信三天可见是被删了吗)

  • 手机死机关机后打不开(手机死机关机后充电没反应咋办)

    手机死机关机后打不开(手机死机关机后充电没反应咋办)

  • 讯飞输入法繁体字改成简体怎么改(讯飞输入法繁体字怎么打)

    讯飞输入法繁体字改成简体怎么改(讯飞输入法繁体字怎么打)

  • 信息后面加感叹号什么意思(信息的感叹号)

    信息后面加感叹号什么意思(信息的感叹号)

  • 随机发货是什么意思(随机发货是什么套路)

    随机发货是什么意思(随机发货是什么套路)

  • 学校的网络属于啥网(学校的网络属于客户机还是对等式)

    学校的网络属于啥网(学校的网络属于客户机还是对等式)

  • 苹果原装手机自带钢化膜吗(苹果原装手机自带贴膜吗)

    苹果原装手机自带钢化膜吗(苹果原装手机自带贴膜吗)

  • 平板充不进去电这是为什么(平板充不进去电维修多少钱)

    平板充不进去电这是为什么(平板充不进去电维修多少钱)

  • qq群坦白说什么意思(qq群坦白说会被发现吗)

    qq群坦白说什么意思(qq群坦白说会被发现吗)

  • iphonexsm港版支持电信吗(xsmax港版可以用电信卡吗)

    iphonexsm港版支持电信吗(xsmax港版可以用电信卡吗)

  • 微博可以定时发送吗(微博可以定时发微博吗)

    微博可以定时发送吗(微博可以定时发微博吗)

  • 联想电脑bios启动项设置图文教程详解(联想电脑bios启动项设置方法)

    联想电脑bios启动项设置图文教程详解(联想电脑bios启动项设置方法)

  • 请文明学习手语脏话(文明手语动作)

    请文明学习手语脏话(文明手语动作)

  • 考税务师的报考条件
  • 公司买车可以抵多少税100万
  • 京东公户的钱怎么转出来
  • 土地使用税是新增税吗
  • 印花税缴款怎么用银行卡支付
  • 主营业务收入体现在资产负债表哪里
  • 保本理财收益增值税纳税主体
  • 不动产什么时候可以抵扣进项税额
  • 企业购买土地如何做账
  • 保函费用是用来干什么的
  • 一般纳税企业可以变更小微企业吗
  • 进口设备贴息政策2019
  • 发行长期债券会计分录例题
  • 基建项目待摊投资
  • 收到福利费会计分录
  • 视同销售的消费税计入成本吗?
  • 土地增值税负数怎么算
  • 高新技术企业认定条件
  • 增值税专用发票几个点
  • 金税盘怎么做账务处理
  • 资产处置损失减少的原因
  • 拆除原有建筑物成本扣除
  • 差额银行承兑汇票
  • 现金日记账余额为零要怎么填
  • linux常见的文本编辑工具有哪些
  • 在win7系统中文件属性有哪些
  • 交际应酬性支出是什么
  • 代发工资有什么弊端
  • 如何进行抵债资金管理
  • 欧罗巴山脉自驾
  • 收据中代收款凭证
  • 固定资产是指什么
  • PHP面向对象程序设计
  • js数组分组并排序
  • 100多年前程序员
  • 对公账号可以绑定微信提现吗
  • 基本户不注销会扣钱吗
  • 网上免费学电脑
  • 收到以前年度增值税退税账务处理怎么做账
  • 建筑企业提供服务的机制保障
  • 哪些费用进项税额要转出
  • 承兑汇票贴现的利率
  • 金蝶利润表没有信用减值损失
  • sqlserver根据查询结果创建表
  • 一般纳税人可以给小规模开专票吗
  • 军工科研事业单位会计制度
  • 接受捐赠要确认收入吗
  • 企业所得税汇算清缴操作流程
  • 金融企业里面的债务
  • 增值税附加税的比例
  • 制单和审单的依据是什么
  • 社区居委会有哪些成员
  • 购买商品商家赠送怎么做分录
  • 已认证专票发现地址为错误
  • 车票抵扣税款
  • 其他应收款包括哪些会计科目
  • 旅行社的代订机票产品能报销吗
  • 预付账款的账务处理例题
  • keyemain.exe是什么进程
  • winxp资源管理器频繁无响应
  • centos基础命令
  • win 7系统双独立显卡设置
  • win7 64位旗舰版电脑如何取消网页自动保存密码?win7取消自动保存网页密码的方法
  • 教你用十行node.js代码读取docx的文本
  • Node.js中的construct构造函数
  • Android中SQLite数据库的使用
  • python生成器有几种写法
  • unity资源包管理器
  • 超实用的八个开车技巧
  • 数字图像处理期末考试
  • python自动化部署k8s集群
  • javascript编程语言
  • jquery打开文件对话框
  • Python的二维列表存储
  • 北京国税地税合并
  • 增值税发票税控开票软件卸载不了
  • 补充协议交印花税嘛
  • 上海增值税发票红字怎么开
  • 徐州市哪些区域有疫情
  • 实体经济的行业有哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设