最新要闻
- 亚香股份: 2022年年度报告摘要
- 全球速读:劳斯莱斯不让进展台 小姐姐直接买了仰望U8、仰望U9两款车
- 【时快讯】广州街头大众CC变道不成 倒车怒撞奔驰E 网友直呼太恶劣
- 华为宣布开放5G网络能力 自家5.5G比5G快10倍|焦点速读
- 什么是期货对冲交易 全球独家
- 每日观点:歌词那些遗憾留在心底_心中的遗憾歌词
- 当前观察:今日沈阳老凤祥黄金价格查询(2023年4月23日)
- 全球快播:提车时大风吹倒墙壁新车被砸 男子:4S店只修不换不退
- 【当前独家】抖音推出种草产品有柿App 由头条搜索升级而来
- 体彩开奖球停在斜坡不下滚遭质疑是什么情况
- 詹姆斯:我职业生涯中和很多人有过对决 所以我不想谈狄龙 焦点快播
- 重返韩国!2023《英雄联盟》S13全球总决赛10月开战:赛程抢先看-全球快看
- 穿一次扔了都不亏!阿里工厂店大促:船袜6毛4一双起
- 全球报道:傅索安巴甫洛夫 傅索安怎么死的
- 头条焦点:缬怎么读(缬字怎么读“缬”的读音是:[xié]【释义】)
- 上不上名校的区别,藏在李雪琴陈都灵的采访中,演员层次分出来了
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Springboot yml配置参数加密 ,jasypt自定义解密器|当前简讯
原文链接:https://www.cnblogs.com/JCcccit/p/16868137.html
(相关资料图)
前言
最近项目组开始关注一些敏感数据的明文相关的事宜 , 其实这些东西也是都有非常成熟的解决方案。 既然最近着手去解决这些事情,那么也顺便给还未了解的大伙普及一下。Springboot yml配置参数数据加密 (数据加密篇 一)_默默不代表沉默-CSDN博客_springboot接口加密
Springboot AOP实现指定敏感字段数据加密 (数据加密篇 二)_默默不代表沉默-CSDN博客
Springboot 使用mysql加密解密函数 (数据加密篇 三)_默默不代表沉默-CSDN博客
这三篇其实已经输出了,但是其实真正落地的时候,我考虑到加密算法的问题,我自己还是做了些许调整。
正文
我配置文件里面写的参数是用的我们自己统一指定的加密算法,
所以解密的时候使用默认jasypt的解密是没办法成功的。
这时候我们就需要自己重写 这个解密配置yml文件参数的解析器了。
话不多说, 我们开始自定义起来。
com.github.ulisesbocchio jasypt-spring-boot-starter 3.0.2
先丢出一个我们自定义选择的加解密工具类 AES的加密解密工具类:
MyEncryptUtil.java
import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.spec.GCMParameterSpec;import javax.crypto.spec.SecretKeySpec;import java.util.Base64;/** * @Author JCccc * @Description * @Date 2021/10/29 16:52 */public class MyEncryptUtil { public static String parseByte2HexStr(byte buf[]) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < buf.length; i++) { String hex = Integer.toHexString(buf[i] & 0xFF); if (hex.length() == 1) { hex = "0" + hex; } sb.append(hex.toUpperCase()); } return sb.toString(); } public static byte[] parseHexStr2Byte(String hexStr) { if (hexStr.length() < 1) { return null; } byte[] result = new byte[hexStr.length() / 2]; for (int i = 0; i < hexStr.length() / 2; i++) { int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16); int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16); result[i] = (byte) (high * 16 + low); } return result; } /** * 1.0 aes-128-gcm 加密 * * @param originalData 为需加密信息 * @param key 32位的16进制key * @return */ public static String encrypt(String originalData, String key) { try { //修改添加字符集 byte[] sSrc = originalData.getBytes("UTF-8"); byte[] sKey = MyEncryptUtil.parseHexStr2Byte(key); SecretKeySpec skeySpec = new SecretKeySpec(sKey, "AES"); Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); //这边是获取一个随机的iv 默认为12位的 byte[] iv = cipher.getIV(); //执行加密 byte[] encryptData = cipher.doFinal(sSrc); //这边进行拼凑 为 iv + 加密后的内容 byte[] message = new byte[12 + sSrc.length + 16]; System.arraycopy(iv, 0, message, 0, 12); System.arraycopy(encryptData, 0, message, 12, encryptData.length); return Base64.getEncoder().encodeToString(message); } catch (Exception ex) { ex.printStackTrace(); return null; } } /** * 1.0 aes-128-gcm 解密 * * @param encryptData 已加密过的数据 * @param key 32位的16进制key * @return */ public static String decrypt(String encryptData, String key) { try { byte[] sSrc = Base64.getDecoder().decode(encryptData); byte[] sKey = MyEncryptUtil.parseHexStr2Byte(key); GCMParameterSpec iv = new GCMParameterSpec(128, sSrc, 0, 12); Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5Padding"); SecretKey key2 = new SecretKeySpec(sKey, "AES"); cipher.init(Cipher.DECRYPT_MODE, key2, iv); //这边和nodejs不同的一点是 不需要移除后面的16位 byte[] decryptData = cipher.doFinal(sSrc, 12, sSrc.length - 12); return new String(decryptData); } catch (Exception ex) { ex.printStackTrace(); return null; } } }
ok,现在我们使用我们的这个加密工具对一些数据进行加密:
加密后的结果 :
直接替换掉yml配置文件里面的数据:
注意了,既然是自定义,那么我们甚至都不需要遵守jasypt的解析规则,我自己定义了一下
格式 : ENC#+ 加密串
这时候,就到了我们的自定义解析器编码环节了:
Encryptor.java :
import com.ulisesbocchio.jasyptspringboot.EncryptablePropertyResolver;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;/** * @Author JCccc * @Description * @Date 2021/12/14 17:05 */@Componentpublic class Encryptor { @Bean(name="encryptablePropertyResolver") EncryptablePropertyResolver encryptablePropertyResolver(){ return new MyEncryptPropertyResolver(); }}
MyEncryptPropertyResolver.java :
import com.demo.easytest.util.MyEncryptUtil;import com.ulisesbocchio.jasyptspringboot.EncryptablePropertyResolver;import org.springframework.stereotype.Component;/** * @Author JCccc * @Description * @Date 2021/12/14 16:56 */@Componentpublic class MyEncryptPropertyResolver implements EncryptablePropertyResolver { private static final String ENC_PREFIX="ENC#"; @Override public String resolvePropertyValue(String value) { if (value!=null && value.startsWith(ENC_PREFIX)){ String str=value.substring(0, value.indexOf("#")); String result=value.substring(str.length()+1); return MyEncryptUtil.decrypt(result,"551b789c25cfbe731f723eab5906de5c"); } return value; }}
其实说白了就是基于jasypt 框架,我们自己改造了一下加解密算法,但是流程还是用人家的。
到这就已经完成了,如果想看看,可以直接debug,看看这个读取解析:
然后正常跑起来,调用一个mysql查询接口,可以看到解析正常,数据库连接正常:
大家可以自己换成自己指定的加解密函数,因为用我本文这个提供的其实有些小限制。
关键词:
-
Springboot yml配置参数加密 ,jasypt自定义解密器|当前简讯
原文链接:https: www cnblogs com JCcccit p 16868137 html前言最近项目组开始关注一些敏感数据的明文相关
来源: 「学习笔记」重修 FHQ-treap
Godot 4.0 设置应用程序图标、项目图标
Springboot yml配置参数加密 ,jasypt自定义解密器|当前简讯
国家能源局:截至3月底全国累计发电装机容量约26.2亿千瓦 同比增长9.1%
亚香股份: 2022年年度报告摘要
全球速读:劳斯莱斯不让进展台 小姐姐直接买了仰望U8、仰望U9两款车
【时快讯】广州街头大众CC变道不成 倒车怒撞奔驰E 网友直呼太恶劣
华为宣布开放5G网络能力 自家5.5G比5G快10倍|焦点速读
什么是期货对冲交易 全球独家
每日观点:歌词那些遗憾留在心底_心中的遗憾歌词
人机识别技术再升级,AIGC为验证码带来万亿种新变化_环球关注
从热爱到深耕,全国Top10开源软件出品人手把手教你如何做开源 微头条
当前观察:今日沈阳老凤祥黄金价格查询(2023年4月23日)
全球快播:提车时大风吹倒墙壁新车被砸 男子:4S店只修不换不退
【当前独家】抖音推出种草产品有柿App 由头条搜索升级而来
体彩开奖球停在斜坡不下滚遭质疑是什么情况
观察:厦门国际银行助力企业赴澳发行首笔“深合债”
詹姆斯:我职业生涯中和很多人有过对决 所以我不想谈狄龙 焦点快播
重返韩国!2023《英雄联盟》S13全球总决赛10月开战:赛程抢先看-全球快看
穿一次扔了都不亏!阿里工厂店大促:船袜6毛4一双起
全球报道:傅索安巴甫洛夫 傅索安怎么死的
优化数据呈现方式,分组双轴图是最佳选择|实时焦点
天天百事通!Transformer
无惧百万级并发,GaussDB(for Cassandra)让华为推送服务更快触达
使用手机在网状态查询 API 有效防止虚假注册的设计思路 全球简讯
视焦点讯!CAS的service参数验证
头条焦点:缬怎么读(缬字怎么读“缬”的读音是:[xié]【释义】)
上不上名校的区别,藏在李雪琴陈都灵的采访中,演员层次分出来了
环球简讯:奇瑞艾瑞泽STAR概念实车现身 网友:换个BBA的标 能卖百万
被泰国红牛告了 禁止生产销售!中国红牛回应:系网络水军抹黑-世界热点
【速看料】燕矶长江大桥北锚碇填芯混凝土大方量浇筑打破项目纪录
NGINX 备忘清单_开发速查表分享_时讯
孕产妇营养饮食大全 全球今头条
环球热门:雀巢丝滑拿铁咖啡15瓶到手59.8元:榛果、焦糖等多种口味
外观大变 增插混版!全新广汽本田雅阁将于5月底上市 全球快资讯
SpaceX星舰发射导流槽都没挖!马斯克:大意了 焦点短讯
4种口味任选 超划算:和路雪千层雪冰淇淋3.87元大促 _世界新要闻
有望下跌!国内油价五一节前调整 预计下调0.07元/升-微资讯
最新资讯:泡菜坛口用水密封的目的 泡菜坛口为什么要用水密封呢
华为云GaussDB支撑华为MetaERP系统全面替换
券商业绩大反攻!“券茅”获基金大幅加仓
15平方米公共绿地被居民私自硬化,路长、物业齐出手
具俊晔有孩子吗?具俊晔个人资料简介
超频冲上3.1GHz!索泰RTX 4070天启OC评测:远超公版的2K游戏最香显卡 天天新要闻
天天精选!公司要求开宝马卖车否则开除!员工回应:没人开宝马
黑猫警长一只耳的耳朵是怎么没的?黑猫警长中一只耳的娘舅是谁?
回家的诱惑宝莲身世第几集揭晓?回家的诱惑宝莲最后和谁在一起了?
张萌制片的作品有哪些?男制片人张萌简介
西海情歌的原唱是谁?西海情歌背后真实的故事
outlook怎么设置msn邮箱?outlook怎么撤回邮件?
第四范式联合创始人胡时伟:AIGC可能带来企业生产要素的变化
塞班s60v3还能用微信吗?塞班手机性能排行
三星笔记本r23plus黑屏怎么解决?三星笔记本r23plus配置
地下城与勇士刺客刷图厉害吗?地下城与勇士刺客转职什么好?
常用的 API 大全整理|全球热消息
【全球速看料】【Spring】三级缓存解决循环依赖问题
支付宝安全控件怎么升级?支付宝安全控件有什么用?
花汐与眠王12 看热讯
全球百事通!李楠评MINI冰淇淋事件:宝马公关写道歉信是真的蠢
【新要闻】专注和沉浸 是华为墨水平板赋予信息碎片化时代的“稀缺品”
第28个世界读书日你读书了吗?超8成图书被已婚人群买走:为了下一代-焦点滚动
海南部署开展道路交通安全和运输执法领域突出问题专项整治工作 每日快播
兵马俑景区“五一”门票预售啦
《安富莱嵌入式周报》第310期:集成大语言模型的开源调试器ChatDBG, 多功能开源计算器,M7内核航空航天芯片评估板, Zigbee PRO规范
世界热议:前端跨域解决方案——postMessage
不回皇马!齐达内出山,无视6000万年薪,拒联手C罗,意甲乱了
世界动态:仿真手感 全身可按:允宝充气颈部按摩仪99元新低(335元券)
【播资讯】小米13 Ultra可变光圈能晃动?小米王化科普:正常物理现象
今日上海消费券线上哪些商家可以用(上海消费如何)
微博如何查看自己评论过的动态(微博如何查看自己评论过的动态记录) 每日简讯
每日热门:超快充伤电池吗?实测:240W用了2个月 手机电池健康度依然100%
比亚迪赵长江:很多客户都是抛弃雷克萨斯LM 过来买腾势D9 天天资讯
直降200元!45mm GPS款苹果表8限时好价
朱砂供星月菩提变色8个过程图_朱砂供星月菩提 每日短讯
我国三款商业液体火箭发动机发布!综合性能达国际先进水平
园方回应熊猫阿宝耳朵被咬成V形:繁殖期太激动 没大碍 世界热消息
安卓手机ip地址更换_1024最新手机地址一二
学系统集成项目管理工程师(中项)系列10_立项管理 世界资讯
环球速看:闺女15岁生日送什么礼物,15岁女孩生日,送什么礼物好?
贡萨洛-拉莫斯谈百场里程碑:齐心协力,全力以赴 全球视讯
当前简讯:青龙面板基础知识和使用教程
怎么做动图表情包_怎么做动图-当前热闻
小米13 Ultra供不应求:明天再次开卖 5999元起_每日讯息
成龙新电影《传说》开拍!女主角是古力娜扎
买冰箱空调洗衣机少踩雷!这些选购干货看下
观热点:是不是觉得微博热搜很蠢?他们好像也意识到了 但没办法
车上被砸冰淇淋、遭谩骂!宝马车主无辜受牵连不敢开车出门、要贱卖车:求理性
英雄无悔_关于英雄无悔的简介 世界速递
【世界聚看点】民心佳园新夜市将于4月26日开市丨重庆10区县遭遇暴雨
孔牙龙_当前要闻
全球快看点丨河南省高招办领导分工_河南省高招办
天青色等烟雨,而零陵在等你! 当前讯息
好消息!石家庄公交将新开1条定制专线和接驳专线,途经这些地方……-最新
精选!祟怎么组词_祟
2023款乘用炮12.68万元起正式上市 精彩看点
古埃及电影大全 环球观速讯
《低噪音破壁机行业发展白皮书》发布 多维降噪成破壁机市场攻坚重点-每日视点
vue3组合式API介绍 报资讯
剑指 Offer 33. 二叉搜索树的后序遍历序列(java解题)
主从redis部署(docker)