Sharding-JDBC使用jasypt3.0及以上版本加密数据库连接密码

本文中介绍的是基于Sharding-JDBC 4.0和jasypt 3.0及其以上版本对数据库连接密码进行加密操作

引入依赖

项目的pom.xml中引入maven依赖

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC3</version>
</dependency>
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>
                

生成密文

首先通过jasypt-1.9.3.jar生成密文

PS C:\Users\Tuhuadmin\.m2\repository\org\jasypt\jasypt\1.9.3>  java -cp .\jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=root password=fulfillForward algorithm=PBEWithMD5AndDES

命令行下执行该命令,打印如下

----ENVIRONMENT-----------------

Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 11.0.2+7-LTS

----ARGUMENTS-------------------

input: root
password: fulfillForward
algorithm: PBEWithMD5AndDES

----OUTPUT----------------------

9v+20XzVBiBBocheB7PWwA==

OUTPUT打印的部分就是加密后的密文。

需要注意的是,如果生成密码命令是root$123,其中包含特殊字符$,需在赋值input字段时前后加了单引号(input='root$123'),如果没有包含特殊字符,单引号可以去掉。包含特殊字符的待加密明文不加单引号,Jasypt 在加密时解析存在问题,会把 root$123 解析成 root

jasypt需要设置用于加密明文的密钥password,它会对input内容加密。解释下参数:

参数 说明

input

明文密码
password 加密的盐值
algorithm 加密策略,对称加密

 

 

 

 

 

 

解密方式

PS C:\Users\ryt\.m2\repository\org\jasypt\jasypt\1.9.3> java -cp .\jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=9v+20XzVBiBBocheB7PWwA== password=fulfillForward algorithm=PBEWithMD5AndDES

----ENVIRONMENT-----------------

Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 11.0.2+7-LTS

----ARGUMENTS-------------------

input: 9v+20XzVBiBBocheB7PWwA==
password: fulfillForward
algorithm: PBEWithMD5AndDES

----OUTPUT----------------------
root

 

 

配置文件中设置密文

上一步中获得到了连接数据库的密码密文,打开应用的配置文件application.properties,修改数据库连接密码为如下格式:

spring.shardingsphere.datasource.ds0.password=ENC(9v+20XzVBiBBocheB7PWwA==)

通过 ENC(密文) 的方式,在程序中获取到的spring.shardingsphere.datasource.ds0.password会自动转换成明文内容(root)

同时需在配置文件application.properties中添加加密盐值和加密策略

jasypt.encryptor.password=fulfillForward
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator

到此通过Sharding-JDBC做分库分表,数据库连接密码加密就完成了。

 

参考连接:https://github.com/ulisesbocchio/jasypt-spring-boot#update-11242019-version-300-release-includes

本人随笔,在此记录,如有问题可微信讨论,微信号:429532901。

 

posted @ 2020-12-21 22:35  任余涛  阅读(1207)  评论(0编辑  收藏  举报