在开发程序系统的过程中,我们时常需要考虑系统安全的问题,
像这样的情况就仿佛你的数据库在裸奔是吧,说不定哪个人悄悄的就给你删库让你跑路了呢?因此在配置文件中是不能出现明文密码。接下来,我将会为大家详细地介绍一下Spring Boot配置文件数据库信息加密的方法。
1.jasypt
Jasypt 这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成 hibernate,Spring Security(Acegi)来增强密码管理。
Jasypt是一个Java库,可以使开发者不需太多操作来给Java项目添加基本加密功能,而且不需要知道加密原理。
根据Jasypt文档,该技术可用于加密任务与应用程序,例如加密密码、敏感信息和数据通信、创建完整检查数据的sums. 其他性能包括高安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、文本、数字和二进制文件。Jasypt也可以与Acegi Security整合也即Spring Security。Jasypt亦拥有加密应用配置的集成功能,而且提供一个开放的API从而任何一个Java Cryptography Extension都可以使用Jasypt。
Jasypt还符合RSA标准的基于密码的加密,并提供了无配置加密工具以及新的、高可配置标准的加密工具。
1、该开源项目可用于加密任务与应用程序,例如加密密码、敏感信息和数据通信
2、还包括高安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、文本、数字和二进制文件。
3、Jasypt还符合RSA标准的基于密码的加密,并提供了无配置加密工具以及新的、高可配置标准的加密工具。
4、加密属性文件(encryptable properties files)、Spring work集成、加密Hibernate数据源配置、新的命令行工具、URL加密的Apache wicket集成以及升级文档。
5、Jasypt也可以与Acegi Security整合也即Spring Security。Jasypt亦拥有加密应用配置的集成功能,而且提供一个开放的API从而任何一个Java Cryptography Extension都可以使用Jasypt。
简单介绍就先这样吧,下面我们先导入相关依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
我这里使用的是2.1.2版本的,因为有些新版本的特性与boot版本有所冲突,会报错!
2.生成加密字符串
将你要加密的信息进行加密生成字符串
@Test
public void testDecrypt(){
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//加密所需的salt(盐)
textEncryptor.setPassword("Bt%XJ^n1j8mz");
//要加密的数据(数据库的用户名或密码)
String username = textEncryptor.encrypt("HNJUNDUIDBA");
String password = textEncryptor.encrypt("admin1234");
System.out.println("username: " + username);
System.out.println("password:" + password);
}
然后运行出来得到加密字符串,如图
3.根据加密字符串更改配置文件
spring:
datasource:
db_dm8:
#达梦数据库driver类
driver-class-name: dm.jdbc.driver.DmDriver
#连接池
type: com.alibaba.druid.pool.DruidDataSource
#达梦数据库的连接地址 assets_DM为达梦的模式
url: jdbc:dm://127.0.0.1:5236/JEECG_BOOT?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
#数据库账户
username: ENC(0AMroWvwSGgxIjOsyiSRMtZHIasH7jqY)
#登录密码
password: ENC(eSaRzjquRNFzU/0MeXtnt5+JRIkGcgZ3)
# 加密所需的密钥
jasypt:
encryptor:
password: Bt%XJ^n1j8mz
# 默认加密方式PBEWithMD5AndDES,可以更改为PBEWithMD5AndTripleDES
algorithm: PBEWithMD5AndDES
(1).默认格式是ENC(密码);
(2).必须指定jasypt.encryptor.password参数;
(3).秘钥可以存放在配置文件或环境变量上;
接下来就可以启动项目了,配置完成!
4.密钥存放问题
首先我们做这个加密就是为了一个系统的安全不让重要信息以明文出现在代码里泄露出去,那么我们上面是已经加密了,既然有加密那就也可以解密。
只要拿到你的加密密钥就可以很轻松的解密!所以把密码放在配置文件中就相当于你拿着钥匙开了门但是钥匙依然挂在门上。
既然这样就可以把密码配置到环境变量中去,先删掉配置文件中的密钥jasypt.encryptor.password
- 系统属性:
java -jar foo.jar -Djasypt.encryptor.password=
Bt%XJ^n1j8mz - 运行参数:
java -jar foo.jar --jasypt.encryptor.password=
Bt%XJ^n1j8mz - 环境变量:
OK!喜欢的大哥哥点个赞哟!