广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何加密配置文件里的敏感数据
  • 384
分享到

如何加密配置文件里的敏感数据

2024-04-02 19:04:59 384人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录加密配置文件里面的敏感数据通用步骤(引入相关依赖)修改前的yml配置文件第一种做法修改后的yml配置文件测试是否可行第二种做法最终还是测试是否可行总结加密配置文件里面的敏感数据

加密配置文件里面的敏感数据

项目开发的时候,需要把数据存放到指定的数据库中(例如Mysqloracle等),还有会使用缓存数据库提升性能的。

连接数据库相关的信息一般都是存放在配置文件里面,Spring Boot会帮我们注入到具体的对象里面。但是如果配置文件里面相关的敏感信息是以【明文】的方式存储,那么就会存在安全隐患

今天偶然想起是不是可以把敏感信息加密起来,然后写到配置文件里面,结果一搜,还真的有,特此记录一下!

通用步骤(引入相关依赖)

<dependency>
    <groupId>com.GitHub.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

数据库信息

Redis缓存信息

修改配置文件,加入密钥

修改前的yml配置文件

server:
  port: 9091
jasypt:
  encryptor:
    # 指定加密密码
    passWord: wxzkjtvvgt@44lvvz
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/encryp?serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: root1234
    username: root
  application:
    name: test-encrypt
  redis:
    port: 6379
    host: 127.0.0.1
    password: iamamg

第一种做法

@Test
    void testEncrypt() {
        final String redisHostEncrypt = stringEncryptor.encrypt("127.0.0.1");
        final String redisPasswordEncrypt = stringEncryptor.encrypt("iamamg");
        final String mysqlUrl = stringEncryptor.encrypt("jdbc:mysql://127.0.0.1:3306/encryp?serverTimezone=UTC");
        final String mysqlUserName = stringEncryptor.encrypt("root");
        final String mysqlPassword = stringEncryptor.encrypt("root1234");
        System.out.println("==================================");
        // 用这些加密的信息替换掉配置文件里面相关的配置项
        
        System.out.println("redis主机加密:" + redisHostEncrypt);
        System.out.println("redis密码加密:" + redisPasswordEncrypt);
        System.out.println("mysql用户名加密:" + mysqlUserName);
        System.out.println("mysql密码加密:" + mysqlPassword);
        System.out.println("mysqlUrl加密:" + mysqlUrl);
        System.out.println("===================================");
        System.out.println("redis主机解密:" + stringEncryptor.decrypt(redisHostEncrypt));
        System.out.println("redis密码解密:" + stringEncryptor.decrypt(redisPasswordEncrypt));
        System.out.println("mysql用户名解密:" + stringEncryptor.decrypt(mysqlUserName));
        System.out.println("mysql密码解密:" + stringEncryptor.decrypt(mysqlPassword));
        System.out.println("mysqlUrl解密:" + stringEncryptor.decrypt(mysqlUrl));
    }
==================================
redis主机加密:V5FeblAg4MRY+TEkmBlSZzgK74CTIyPPnrkcpUibYFMxbEHtmPWduLxdHpgFn3Gw
redis密码加密:0aP2oNj2IrXA9bl6HygZQESEy82dWccigQ5Fic474y8f3pyDNxRIdA+C5SjHsKEY
mysql用户名加密:cTPlLHJqZcchsnd0N9gZWGpFcfAFS0EwFwT0foYPXqxA9ngXfNtCUoR7rLvPfYRF
mysql密码加密:/J2IBQyk8aydeBKL6E553ffxanVE660uuNOzUrNlVMEcrejy70Sen0MKkXc7szQ0
mysqlUrl加密:NvHXbj9LhVamadZSyXfB/Alsg+XuICiJUKTC/dl92lDEF0GCHoIi1Fd0HOxGoEBydgnyNdyK0cnDC0vyC0k+e5AR9Cr8VYDUMdALMr+85Ar4XrPZ0ZICYAsox84fSMdb
===================================
redis主机解密:127.0.0.1
redis密码解密:iamamg
mysql用户名解密:root
mysql密码解密:root1234
mysqlUrl解密:jdbc:mysql://127.0.0.1:3306/encryp?serverTimezone=UTC

修改后的yml配置文件

可能你也观察到了,需要额外注意的一点就是,需要加密的数据项都使用了ENC()括起来了

server:
  port: 9091
jasypt:
  encryptor:
    # 加密密码
    password: wxzkjtvvgt@44lvvz
spring:
  datasource:
    url: ENC(NvHXbj9LhVamadZSyXfB/Alsg+XuICiJUKTC/dl92lDEF0gcHoIi1Fd0HOxGOEBydgnyNdyK0cnDC0vyC0k+e5AR9Cr8VYDUMdALMr+85Ar4XrPZ0ZICYAsox84fSMdb)
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: ENC(/J2IBQyk8aydeBKL6E553ffxanVE660uuNOzUrNlVMEcrejy70Sen0MKkXc7szQ0)
    username: ENC(cTPlLHJqZcchsnd0N9gZWGpFcfAFS0EwFwT0foYPXqxA9ngXfNtCUoR7rLvPfYRF)
  application:
    name: test-encrypt
  redis:
    port: 6379
    host: ENC(V5FeblAg4MRY+TEkmBlSZzgK74CTIyPPnrkcpUibYFMxbEHtmPWduLxdHpgFn3Gw)
    password: ENC(0aP2oNj2IrXA9bl6HygZQESEy82dWccigQ5Fic474y8f3pyDNxRIdA+C5SjHsKEY)

测试是否可行

	
    @Test
    void testSelectInMysql() {
        String sql = "SELECT COUNT(1) FROM T0001_TEST";
        final Integer num = jdbcTemplate.queryForObject(sql, Integer.class);
        System.out.println(num);
    }
    
    @Test
    void testSelectInRedis() {
        final String name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }

但是,大家且思考一下,我们当前yml配置文件里面依然存在着密钥,这是不是很不合理?只要解读到这个文件,密钥还是会被知道,所以这里提供另外一种做法

第二种做法

1.首先把yml文件里面的密钥记录下来,然后把配置去掉(其实就是把这个配置移到运行的时候才指定)

启动的时候加上-Djasypt.encryptor.password= 密钥 ;这里的密钥为 wxzkjtvvgt@44lvvz,如果密钥错误,项目是启动不成功的,通常报的错都是数据库连接失败,这也挺正常的,因为如果是错误的密钥,密文信息就无法解密,得到的自然是不符合的信息,所以会报错

# 就把关于密钥的部分移除,其他依旧不变
server:
  port: 9091
spring:
  datasource:
    url: ENC(NvHXbj9LhVamadZSyXfB/Alsg+XuICiJUKTC/dl92lDEF0gcHoIi1Fd0HOxGOEBydgnyNdyK0cnDC0vyC0k+e5AR9Cr8VYDUMdALMr+85Ar4XrPZ0ZICYAsox84fSMdb)
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: ENC(/J2IBQyk8aydeBKL6E553ffxanVE660uuNOzUrNlVMEcrejy70Sen0MKkXc7szQ0)
    username: ENC(cTPlLHJqZcchsnd0N9gZWGpFcfAFS0EwFwT0foYPXqxA9ngXfNtCUoR7rLvPfYRF)
  application:
    name: test-encrypt
  redis:
    port: 6379
    host: ENC(V5FeblAg4MRY+TEkmBlSZzgK74CTIyPPnrkcpUibYFMxbEHtmPWduLxdHpgFn3Gw)
    password: ENC(0aP2oNj2IrXA9bl6HygZQESEy82dWccigQ5Fic474y8f3pyDNxRIdA+C5SjHsKEY)

2.在idea里面启动程序的方式

3.打成jar包,命令行启动的方式

最终还是测试是否可行

此时模拟真实的三层开发

//controller代码
    

@RestController
public class TestController {
    @Autowired
    TestServiceImpl service;
    @GetMapping("/count")
    public String getCount() {
        final Integer count = service.getCount();
        if (StringUtils.isEmpty(count)) {
            return "连接数据库出问题了";
        } else {
            return "连接数据库成功!当前数据量为:" + count;
        }
    }
}
//service代码

@Service
public class TestServiceImpl {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public Integer getCount() {
        try {
            String sql = "SELECT COUNT(1) FROM T0001_TEST";
            return jdbcTemplate.queryForObject(sql, Integer.class);
        } catch (DataAccessException e) {
            e.printStackTrace();
            return null;
        }
    }
}

莫得问题!

总结

1、引入相关依赖

2、修改配置文件,加入密钥配置 / 启动的时候指定密钥

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 如何加密配置文件里的敏感数据

本文链接: https://www.lsjlt.com/news/151780.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何加密配置文件里的敏感数据
    目录加密配置文件里面的敏感数据通用步骤(引入相关依赖)修改前的yml配置文件第一种做法修改后的yml配置文件测试是否可行第二种做法最终还是测试是否可行总结加密配置文件里面的敏感数据 ...
    99+
    2022-11-13
  • 使用Springboot对配置文件中的敏感信息加密
    Springboot对配置文件的敏感信息加密 前言 最近公司对软件的安全问题比较在意,要求对配置文件中的敏感信息如数据库密码等进行加密。但是Springboot是一款高度集成的框架,...
    99+
    2022-11-12
  • 如何利用RSA证书加解密敏感数据
    如何利用RSA证书加解密敏感数据,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。RSA算法的描述中,文章利用makecert工具生成的生成的MyTestCert证...
    99+
    2023-06-17
  • 如何启用CentOS系统上的文件系统加密以保护敏感数据
    要在CentOS系统上启用文件系统加密以保护敏感数据,可以按照以下步骤进行操作:1. 在安装CentOS系统时选择加密分区:在安装C...
    99+
    2023-10-12
    CentOS
  • Springboot之日志、配置文件、接口数据如何脱敏
    目录一、前言二、配置文件如何脱敏?1. 添加依赖2. 配置秘钥3. 生成加密后的数据4. 将加密后的密文写入配置5. 总结三、接口返回数据如何脱敏?1. 自定义一个Jackson注解...
    99+
    2022-11-12
  • 如何给yml配置文件的密码加密(SpringBoot)
    目录1.低版本2.x1)引入jar包2)生成密码3)测下解密4)yml配置5)测测登录2.高版本 3.x1)引入jar包2)生成密码3)yml配置最近在忙着解决规约扫描的问题,其一就...
    99+
    2022-11-13
    yml配置文件 yml密码加密 yml配置文件密码加密
  • 如何配置CentOS系统保护敏感数据的传输和存储
    要配置CentOS系统保护敏感数据的传输和存储,可以采取以下几个步骤:1. 使用加密协议传输数据:在传输敏感数据时,使用加密协议(如...
    99+
    2023-10-10
    CentOS
  • 关于Springboot数据库配置文件明文密码加密解密的问题
    有时候因为安全问题,需要把配置文件的中数据库用户名密码由明文改成密文,大多数其实是为了应付甲方而已。 1.pom.xml引入依赖 <dependency> <...
    99+
    2022-11-13
  • php配置数据库文件加密怎么实现
    实现 PHP 配置数据库文件加密可以通过以下步骤进行: 创建一个用于加密和解密的密钥。可以使用 OpenSSL 扩展的 opens...
    99+
    2023-10-27
    php 数据库
  • SpringBoot项目中如何利用application.yml文件配置数据库密码加密
    这篇文章主要讲解了“SpringBoot项目中如何利用application.yml文件配置数据库密码加密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot项目中如何利用ap...
    99+
    2023-06-08
  • SpringBoot如何加密配置文件的SQL账号密码
    这篇文章主要介绍了SpringBoot如何加密配置文件的SQL账号密码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot如何加密配置文件的SQL账号密码文章都会有所收获,下面我们一起来看看吧。1...
    99+
    2023-07-02
  • 如何使用加密存储和传输保护CentOS系统中的敏感数据
    要保护CentOS系统中的敏感数据,可以使用以下方法来进行加密存储和传输:1. 使用文件加密工具:可以使用诸如GPG(GNU隐私保护...
    99+
    2023-10-10
    CentOS
  • Springboot如何实现对配置文件中的明文密码加密
    这篇文章主要介绍了Springboot如何实现对配置文件中的明文密码加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Springboot如何实现对配置文件中的明文密码加密文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-05
  • 如何解决配置文件中的数据库连接串加密了问题
    这篇文章主要介绍“如何解决配置文件中的数据库连接串加密了问题”,在日常操作中,相信很多人在如何解决配置文件中的数据库连接串加密了问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-18
  • 如何在spring中对配置文件进行加密
    这篇文章将为大家详细讲解有关如何在spring中对配置文件进行加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通过继承spring配置类并重写处理方法实现密文解密public c...
    99+
    2023-05-30
    spring
  • 配置文件加密了数据库配置信息为什么Spring Boot仍能连接数据库
    这篇“配置文件加密了数据库配置信息为什么Spring Boot仍能连接数据库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“配...
    99+
    2023-06-27
  • 详解如何利用jasypt实现配置文件加密
    目录引入依赖生效作用域应用工具类配置属性一览进阶Jasypt (Java Simplified Encryption) 是一个 java 库,它允许开发人员以最小的成本将基本的加密功...
    99+
    2022-11-13
  • Java中如何给数据库加密配置项
    这篇文章主要讲解了“Java中如何给数据库加密配置项”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中如何给数据库加密配置项”吧!先看一份典型的配置文件... 省略 ...## 配置M...
    99+
    2023-06-02
  • vb中如何在数据文件加密码
    通过使用以下vb函数,对数据文件进行加密,代码如下:Option ExplicitDim i As LongDim databuff As Byte //定义数组用于存放文件内容Dim addbuff As Byte //定义数组用于存放加...
    99+
    2022-10-22
  • 云服务器如何配置access数据库文件权限密码
    要配置云服务器的access数据库文件权限密码,可以按照以下步骤进行操作: 准备数据库文件。在开始之前,您需要准备您要访问的云平台数据库文件。如果您正在使用其他云平台数据库,则还需要确保您已经安装了该数据库的版本和用户许可证。 打开数据...
    99+
    2023-10-26
    数据库文件 权限 密码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作