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

  • 小米手机能升级鸿蒙系统吗(小米手机能升级存储空间吗)

    小米手机能升级鸿蒙系统吗(小米手机能升级存储空间吗)

  • 华为nova7pro的屏幕是曲面屏的吗(华为nova7pro的屏幕刷新率)

    华为nova7pro的屏幕是曲面屏的吗(华为nova7pro的屏幕刷新率)

  • iphone11看朋友圈视频卡顿(苹果11朋友圈怎么显示手机型号)

    iphone11看朋友圈视频卡顿(苹果11朋友圈怎么显示手机型号)

  • 微信群付款怎么操作(微信群付款怎么设置金额)

    微信群付款怎么操作(微信群付款怎么设置金额)

  • 小米新系统miui12什么时候更新(小米新系统怎么样)

    小米新系统miui12什么时候更新(小米新系统怎么样)

  • 为什么内存卡插到手机里面不能用(为什么内存卡插到电脑上去没反应?)

    为什么内存卡插到手机里面不能用(为什么内存卡插到电脑上去没反应?)

  • 腾讯会议可以共享屏幕吗(腾讯会议可以共享爱奇艺视频吗)

    腾讯会议可以共享屏幕吗(腾讯会议可以共享爱奇艺视频吗)

  • 分辨率1920x1080什么意思(分辨率1920x1080什么手机)

    分辨率1920x1080什么意思(分辨率1920x1080什么手机)

  • mt20pro没有屏幕指纹吗(mate20pro屏幕没反应)

    mt20pro没有屏幕指纹吗(mate20pro屏幕没反应)

  • 电脑显示屏亮一下就灭(电脑显示屏亮一下黑一下闪烁)

    电脑显示屏亮一下就灭(电脑显示屏亮一下黑一下闪烁)

  • vivos1怎么截屏手机屏幕(vivos1手机截图怎么截)

    vivos1怎么截屏手机屏幕(vivos1手机截图怎么截)

  • iqoo支持模拟门禁卡吗(iqoo neo5模拟器)

    iqoo支持模拟门禁卡吗(iqoo neo5模拟器)

  • 为什么手机充不进电反而少了(为什么手机充不上电了苹果)

    为什么手机充不进电反而少了(为什么手机充不上电了苹果)

  • 荣耀v30pro防水防尘不(荣耀v30por防水级别)

    荣耀v30pro防水防尘不(荣耀v30por防水级别)

  • iphone11费电怎么办(苹果11耗电如何)

    iphone11费电怎么办(苹果11耗电如何)

  • vivo手机sos功能怎么关闭(vivo手机sos设置在哪)

    vivo手机sos功能怎么关闭(vivo手机sos设置在哪)

  • 未信任的app怎么设置(未信任的软件怎么信任)

    未信任的app怎么设置(未信任的软件怎么信任)

  • 手机的系统相册在哪里 (手机的系统相册在什么位置苹果)

    手机的系统相册在哪里 (手机的系统相册在什么位置苹果)

  • 收到虎牙科技验证码是怎么回事(虎牙科技是干什么的收费吗)

    收到虎牙科技验证码是怎么回事(虎牙科技是干什么的收费吗)

  • 如何删除12306的乘客(如何删除12306的订单记录)

    如何删除12306的乘客(如何删除12306的订单记录)

  • 笔记本电脑怎么翻页(笔记本电脑怎么恢复出厂设置)

    笔记本电脑怎么翻页(笔记本电脑怎么恢复出厂设置)

  • 华为7plus单独换外屏(华为7p换电池)

    华为7plus单独换外屏(华为7p换电池)

  • 拼多多悬浮球怎么关闭(拼多多悬浮球怎么设置)

    拼多多悬浮球怎么关闭(拼多多悬浮球怎么设置)

  • 笔记本电脑可以投屏吗(笔记本电脑可以填报高考志愿吗)

    笔记本电脑可以投屏吗(笔记本电脑可以填报高考志愿吗)

  • 福建税务网上办税流程
  • 纳税申报的基本内容有哪些
  • 增值税发票查验平台怎么查询发票
  • 进口海关是指
  • 交易性金融资产的交易费用计入哪里
  • 为职工代垫的水电费应计入
  • 小规模税收优惠政策1%到什么时候
  • 固定资产折旧年限
  • 招标代理资质办理好办吗
  • 房产企业土地增值税税率
  • 怎么开具商业承兑票据
  • 合伙企业转让股权需要其他股东同意吗
  • 结转销项税额至未交增值税的结转系数
  • 印花税按次申报和按期申报区别
  • 企业个人所得税申报系统官网
  • 砂石加工行业交什么税
  • 增值税普票没有地址电话开户行信息可以吗
  • 增值税发票国家收几个点的钱
  • 预收账款可以开票吗
  • 收到往来款的账务处理
  • 合同取得成本和增量成本有什么区别
  • 如何解决win10关机后usb还在供电
  • 发票产生的材料是什么
  • 银行承兑汇票付款提示期限
  • win11如何添加快捷方式
  • php怎么把数组变成字符串
  • 押金收不回的会计分录
  • php 设计模式
  • 税收包含哪些税种
  • php tokenizer
  • 会计凭证包括哪几种凭证
  • 非正常损失会计利润调整
  • vue3怎么用
  • php 二叉树
  • pytorch怎么入门
  • 魔改toolbox
  • zip命令详解
  • post configuration change
  • 缴纳工会筹备金可以计入工会经费科目吗
  • 企业收到税务退税通知书
  • 税控盘全额抵扣政策
  • 发现以前年度的账错误
  • 出纳把现金存入私人账户后转公账
  • mongodb如何修改数据
  • 假退库会计分录
  • 专票认证之后怎么做账
  • 转账结算的原则是什么
  • 招待费发票可以开专票吗
  • 关于发票冲账应该怎么写
  • 工会经费征收项目是什么
  • 报销程序是什么
  • 如何进行固定资产审计
  • 如何设置生产成本总账表格
  • 企业应该设置哪些部门
  • sql server 数据库介绍
  • linux下mysql 5.7.16 免安装版本图文教程
  • freebsd怎么样
  • win8找不到恢复环境怎么恢复出厂设置
  • 怎么调用windows api
  • win7旗舰版系统还原无法启动
  • win10系统怎么卸载ie浏览器
  • Unity AssetBundle爬坑手记
  • js date()
  • css中div怎么用
  • bootstrap弹出表单
  • dos命令怎么输入命令
  • android指南针源码
  • js 实现跳转页面
  • linux shell 循环语句
  • shell 单引号中引用变量
  • android 设置背景
  • js 修改 css
  • 每天一篇文章锻炼口才的文章
  • javascript 对象的this指向
  • 税务局执法不规范整改
  • 税务所是县级机构吗
  • 深圳税务局工作时间表
  • 卷式发票如何查验真伪
  • 税控盘如何分配发票
  • 税务局的纳税服务有哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设