真实的项目开发中,数据库的密码不可能以明文方式写在配置文件中,一般都是经过加密的;
今天,主要介绍用Driver来对数据库的密码进行加密。
alibaba druid加解密规则:
- 明文密码+私钥(privateKey)加密=加密密码
- 加密密码+公钥(publicKey)解密=明文密码
首先介绍Driver的加解密有关的API。
import java.util.List;
@SpringBootTest
class DeleApplicationTests {
void generateKey() throws Exception {
// 不使用公私钥
// 加密,参数为要加密的文本
String plainText = ConfigTools.encrypt("plainText");
// 解密,参数为加密后的文本
String decrypt = ConfigTools.decrypt(plainText);
// 使用公私钥,返回字符串
// 生成密钥对,参数为密钥大小,最小值为512
String[] strings = ConfigTools.genKeyPair(512);
// strings[0]:私钥
// strings[1]:公钥
// 返回字节数组
// byte[][] bytes = ConfigTools.genKeyPairBytes(512);
// 加密
String plainText1 = ConfigTools.encrypt(strings[0], "plainText");
// 解密
String decrypt1 = ConfigTools.decrypt(strings[1], plainText1);
}
}
yml 文件中对数据库密码加密的操作。
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
username: root
# 此处使用公钥加密过的密码
password: AC25pHo0vjwUrHE/YWhcbi2GJ8ZNZQoecj75EgRgWpCtyfrDioyTZVZ5u62paxgPwgk4lhBg/YIfKJpniiWpbVU=
url: jdbc:mysql://localhost:3306/del?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
db-type: mysql
filter:
config:
# 开启此配置,如果为false,则上面的密码要为明文密码
enabled: true
connect-properties:
# 是否要解密,如果为false,则上面的密码要为明文密码
config.decrypt: true
# 此处为公钥,可以省略此配置,如果省略,则上面的密码在加密时可以不使用公钥加密
config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAX7VAzNfTT/SAdpYEE04C0t7DG+RjhwhtDIgBvq1v9j0gnu3oub/VXe2udK55Wm6LcnNRkSEO4ZwgXJhKbAoHOUCAwEAAQ==
mybatis-plus:
configuration:
# 打印sql语句
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
补充
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
# 数据库密码的公钥,请查看 PasswordTests类
publickey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMpfDh4Pu096EhkQhSK0oozlTm15xr0yCuq5RULAjhUe0sHUcP0MaTT4GLCQM0DDbqcK8OFsAhSyzU5uCQFruZkCAwEAAQ==
# 是否开启数据库密码加密
dataEncryption: true
druid:
filter:
config:
enabled: ${spring.datasource.dataEncryption}
connection-properties: config.decrypt=true;config.decrypt.key=${spring.datasource.publickey}
以上就是在SpringBoot项目中对数据库密码加密的方式。