场景
目前使用spring-boot进行开发,例如数据库mysql,redis等相关基础服务的密码依然以明文的方式配置在应用服务里面,整个公司的数据安全难以保证,所以需要一个方式解决这个密码暴露的问题
解决方案
在网上搜索,最终发现果然有三方提供的加密算法的工具类Jar(Jasypt),项目地址在github
使用方法如下
以spring-boot项目为例
- 第一步引入相关的依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
-
第二步下载对应的jaypt的jar包
-
第三步 运行如下命令对敏感数据进行加密
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI password=bq71wIW5Lpzqqm3Y algorithm=PBEWithMD5AndDES input=root
其中参数
| 参数值 | 含义 |
|---|---|
| password | 加密的salt |
| algorithm | 加密使用的算法 |
| input | 要加密的字段 |
输出结果如下:
----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.111-b14
----ARGUMENTS-------------------
input: root
algorithm: PBEWithMD5AndDES
password: bq71wIW5Lpzqqm3Y
----OUTPUT----------------------
yrRYydkan5GPHrUP5oNDzA==
-OUTPUT-下的输出,即为加密后的字符串
- 第四步 配置properties或者yaml文件,将生成的加密串配置ENC(加密串)到application.properties或者applicaition.yml中
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
auto-commit: true
connection-test-query: SELECT 1
connection-timeout: 30000
idle-timeout: 30000
max-lifetime: 1800000
maximum-pool-size: 15
minimum-idle: 5
pool-name: DatebookHikariCP
password: ENC(zStr9GBzu706rMHZJIEm6rbMSzQLHqTk)
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://127.0.0.1:3306/dive?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull
username: ENC(yrRYydkan5GPHrUP5oNDzA==)
- 第五步 启动项目时,添加命令参数,将上面加密时用的salt作为参数
java -jar -Djasypt.encryptor.password=bq71wIW5Lpzqqm3Y xxx.jar