当前位置: 首页 > news >正文

Springboot yml配置参数数据加密 (数据加密篇 一)

前言

最近项目组开始关注一些敏感数据的明文相关的事宜 , 其实这些东西也是都有非常成熟的解决方案。 既然最近着手去解决这些事情,那么也顺便给还未了解的大伙普及一下。

这个系列就暂短的分成三篇 :

 第一篇    yml配置文件里敏感数据的加密

 第二篇    传入数据敏感数据的加密存储

https://blog.csdn.net/qq_35387940/article/details/121374918

第三篇     使用mysql加解密函数轻松实现

Springboot 使用mysql加密解密函数 (数据加密篇 三)_默默不代表沉默-CSDN博客


 

本篇是第一篇


正文

先看我们的实践项目例子 :


 我们目标是想对这些我们认为是敏感的数据加密,不能这么明白的展现出来 。

1. pom文件引入依赖:
 

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

2.yml引入加密钥匙配置 :


#jasypt加密的密匙
jasypt:
  encryptor:
    password: JCCCCgd6Tsjckd87xGy6H1JGb47G2H72

这里注意,如果直接把加密password这样摆在yml里面,其实也是敏感的, 一会文章后面会介绍把这个当作启动参数传入。

3.开始事宜jasypt 加密 :

我们把需要加密的敏感数据拿出来,提前加密:

    @Autowired
    StringEncryptor encryptor;

    @Test
    void contextLoads() {

        String dbUrl = encryptor.encrypt("jdbc:mysql://localhost:3306/mytest?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull");

        System.out.println(dbUrl);

        String username = encryptor.encrypt("root");

        System.out.println(username);

        String password = encryptor.encrypt("root");

        System.out.println(password);


    }


可以拿到对应加密出来的数据 。

4.使用jasypt 的解析规则,把加密完后的数据替换配置到 yml文件里:
 

 规则  ENC(加密数据)

5. 运行项目,调用查询接口,看看是否能正常获取数据库数据,校验相关敏感数据是能正常解密解析的:

ok,到这里我们已经完成了本篇的实践内容 。

我们最后来针对这个  jasypt的加密解密使用钥匙做点事情,

我们要把这个参数变成 不写死不暴露 的:

方案提供思路: 当作启动参数传入 

实践:

我们把yml的钥匙去掉, 保留原先加密完的数据配置 :

spring:
  datasource:
    druid:
     url: ENC(OGNie1iT/W6LBSdXvmIv/tyQA69HbI1OUSh3MM/UeTv2dufbuJBu0aEf7EN86DOPiXOZyHtYTVwu+3AHtmPPZYxXbaw9xU04x8POZsWjx6BmQBmdNRyBVcO7IixG9F+WK6+jlRhXEsgqTk+MOpDuPBBmf8Zw+LoWeKPICfqn2SOJAOJ2gSrE7wDSR4YRejgDWDPcMIvo4yfKG8pJZZ6OeQ==)
     username: ENC(cuaMHDblkuVeHSFyV+OKmQ==)
     password: ENC(BEQNsEv0gIkvRWwg2P9ktg==)

server:
  port: 8766

mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

然后当作 启动参数传入

-Djasypt.encryptor.password=JCCCCgd6Tsjckd87xGy6H1JGb47G2H72


如果是使用jar运行就对应命令里面加入  类似:

java -jar -Djasypt.encryptor.password=JCCCCgd6Tsjckd87xGy6H1JGb47G2H72 XXX-xxxx.jar

模拟测试一下这种方式:

测试结果: 

相关文章:

  • Springboot AOP实现指定敏感字段数据加密 (数据加密篇 二)
  • Springboot 使用mysql加密解密函数 (数据加密篇 三)
  • Java List数据量大, 需要分片批次操作
  • Springboot yml配置参数加密 ,jasypt自定义解密器(拓展篇)
  • Springboot 自定义mybatis 拦截器,实现我们要的扩展
  • Eureka 一直刷 Running the evict task with compensationTime 0ms
  • Eureka 注册、下线、续约事件的监听使用
  • Java Thread.sleep(),结合例子只学一次
  • Java ArrayList new出来,默认的容量到底是0还是10 ?
  • Mysql 关于 int(1) 和 int(11) , 我必须要说一下了。
  • SpringCloud 整合注册中心,配置中心 Nacos (九)
  • Springboot 自定义注解AOP实现时间参数格式转换
  • 看什么看啊,你不会还不会抓HTTPS请求报文吧?
  • 做一个合格的开发,从玩转Apipost开始
  • Springboot 整合 企业微信机器人助手推送消息
  • canvas绘制圆角头像
  • CSS 提示工具(Tooltip)
  • React16时代,该用什么姿势写 React ?
  • Spring声明式事务管理之一:五大属性分析
  • Swift 中的尾递归和蹦床
  • Twitter赢在开放,三年创造奇迹
  • 基于Android乐音识别(2)
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 基于组件的设计工作流与界面抽象
  • 京东美团研发面经
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端面试题总结
  • 人脸识别最新开发经验demo
  • 算法---两个栈实现一个队列
  • 微信支付JSAPI,实测!终极方案
  • MPAndroidChart 教程:Y轴 YAxis
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • $.each()与$(selector).each()
  • (2)MFC+openGL单文档框架glFrame
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (六)Hibernate的二级缓存
  • (新)网络工程师考点串讲与真题详解
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET的微型Web框架 Nancy
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .so文件(linux系统)
  • @font-face 用字体画图标
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [20181219]script使用小技巧.txt