因公司考虑到连接外网的数据再配置文件里面直接以明文的方式直连,容易暴露,所以采取将连接的重要内容进行加密处理。减少关键内容被暴露再外网的可能性,增加系统安全性。此处做个笔记。
加密的方式有两种。使用的连接jar包不同,加密的方式也不同。此处使用的是springboot2.2.6版本集成项目!
方式一:
使用常用连接,如MySQL的直连方式,需引入相关包之外再加上一个加密的额外jar包,
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
获取明文被加密后的密文有两种方式,一种是通过jdk执行获取,此处不再详细贴出。只以编写代码的方式获取密文,代码如下:
public static void enc(){
String username = "root";
String password = "123456";
System.out.println("待加密名称:" + username);
System.out.println("待加密密码:" + password);
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setAlgorithm("PBEWithMD5AndDES");//这是加密方式,采用MD5和DES的对称加密
encryptor.setPassword("XXXXXXXXXXXXXXX");//这是加盐,salt。增加密文不被撞破的概率
String enc_name = encryptor.encrypt(username);
String enc_pwd = encryptor.encrypt(password);
System.out.println("加密后名称:" + enc_name);
System.out.println("加密后密码:" + enc_pwd);
String redisPwd = "123456";
String enc_redis = encryptor.encrypt(redisPwd);
System.out.println("redis Pwd机密后:" + enc_redis);
String dec_name = encryptor.decrypt(enc_name);
String dec_pwd = encryptor.decrypt(enc_pwd);
System.out.println("解密后名称:" + dec_name);
System.out.println("解密后密码:" + dec_pwd);
}
代码很详细,加密和解密的内容都有详细输出。
然后配置文件添加相关配置代码:
在spring.datasource下修改连接用户名和密码为被加密的字符,其中必须用ENC()标识,括号里面的才是加密后的密文
username: ENC(0Gu1u1xaBGpbHd5jcNajgQ==)
password: ENC(R8I9XiND2EHiaMvSQrRbAgTQiH2QOxTt)
并增加以下配置代码:
# ENC 加密的盐
jasypt:
encryptor:
algorithm:
password: XXXXXXXXXXXXXXX #对应上面的盐
方式二:
使用阿里巴巴的druid的连接jar包,先加入引用包,同样也有jdk执行命令获取密文的方式,此处也不再详细贴出。只以编写代码的方式获取密文,代码如下:
public static void druid(){
String name = "admin";
try {
System.out.println("待加密字符:" + name);
String[] keyPair = ConfigTools.genKeyPair(512);//密钥位数
String privateKey = keyPair[0];
String publicKey = keyPair[1];
System.out.println("私钥:" + privateKey);
System.out.println("公钥:" + publicKey);
//用私钥加密后的密文
String encrypt = ConfigTools.encrypt(privateKey,name);
System.out.println("加密后:" + encrypt);
String decrypt = ConfigTools.decrypt(publicKey, encrypt);
System.out.println("解密后:" + decrypt);
} catch (Exception e) {
e.printStackTrace();
}
}
加密解密的方式都有贴出,druid采用的是RSA的非对称加密方式(当然里面也有DES,MD5等对称加密放方式,代码未提供),相比DES等对称加密的方式更加安全。
然后配置文件添加相关配置代码:
在spring.datasource下修改连接用户名和密码为被加密的字符,需要遵循druid的加解密方式:
username: XXXXXXXX
password: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx
并在配置文件中添加一个密钥(公钥)
public-key:XXXXXXXXXXXXXXXXXX
还需要再druid的配置项里面添加如下配置:
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=${public-key}
加粗的配置内容是必须的,不然是连接不上的,需要注意。
根据需要选用加密方式!