SpringBoot中使用jasypt加解密的示例分享
下文笔者讲述SpringBoot中对配置信息的加密和解密的示例分享
如:在应用程序的配置文件中,一些配置信息处于加密状态
当程序需要使用时,再将信息解密然后使用
如:在应用程序的配置文件中,一些配置信息处于加密状态
当程序需要使用时,再将信息解密然后使用
jasypt加密解密的实现思路
1.引入jasypt相关依赖 2.配置jasypt使用的相关配置信息 3.使用工具类进行相关的加密和解密操作例
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
配置文件:
# 加密的密钥
# 测试环境可以采用在配置文件中配置
# 生产环境建议采用启动参数的形式传入
# 其他配置参数参考:com.ulisesbocchio.jasyptspringboot.properties.JasyptEncryptorConfigurationProperties
jasypt.encryptor.password=you salt
# 解密得到原始密码spring.datasource.password= ENC(密文)
//密文解密
@Autowired
StringEncryptor stringEncryptor;
@Test
public void encrypt() {
System.out.println("PWD: " + stringEncryptor.encrypt("yourpassword"));
}
public static void main(String[] args) {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//加密所需的salt(盐)
textEncryptor.setPassword("G0CvDz7oJn6");
//要加密的数据(数据库的用户名或密码)
String username = textEncryptor.encrypt("root");
String password = textEncryptor.encrypt("root123");
System.out.println("username:"+username);
System.out.println("password:"+password);
}
SpringBoot中引入jasypt
源码地址
https://github.com/ulisesbocchio/jasypt-spring-boot
//引入依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
//application.yml
//中增加jasypt的秘钥
jasypt:
encryptor:
#加密秘钥
password: 8ewrIOPIECD8919232FEEAK8923251
//测试类
@RestController
public class IndexController {
@Autowired
private StringEncryptor encryptor;
/**
* 测试jasypt加密解密
*/
@GetMapping("/jasypt")
public void testJasypt() {
String password = "123456";
String encryptPwd = encryptor.encrypt(password);
System.out.println("加密::" + encryptPwd);
System.out.println("解密:" + encryptor.decrypt(encryptPwd));
}
}
//启动服务,测试SpringBoot中是否正常加入jasypt
//浏览器请求(端口号自定义):http://localhost:8080/jasypt
加密: stqvirrvG8TcLz9mqflBDQ==
解密:123456
//jasypt由于其使用的是PBEWithMD5AndDES加密方式
//所以每次加密出来的结果都不一样
//但解密都是一样的
//所以很适合对数据进行加密
//例 数据库密码为123456
spring:
application:
name: service-provider
datasource:
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/mydb?autoReconnect=true&failOverReadOnly=false&createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=utf8
username: root
password: ENC(stqvirrvG8TcLz9mqflBDQ==)
上面的 ENC()是固定写法,()里面是加密后的信息。 7、在测试类中增加代码:
@Value("${spring.datasource.password}")
private String dbPassword; // 数据库密码
/**
* 测试配置文件字段加密后,项目中该字段的值
*/
@GetMapping("/password")
public String password() {
return dbPassword;
}
//请求http://localhost:8080/password
//出现结果 123456
jasypt:
encryptor:
#加解密秘钥
password: 8ewrIOPIECD8919232FEEAK8923251
#设置前缀后缀
property:
prefix: "ENC@["
suffix: "]"
//将加解密秘钥放在配置文件中是不安全的
//1、在启动类上赋值秘钥:
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
/** 配置加解密秘钥,与配置文件的密文分开放 */
System.setProperty("jasypt.encryptor.password", "test-app");
// System.setProperty("jasypt.encryptor.password", "8ewrIOPIECD8919232FEEAK8923251");
SpringApplication.run(ProviderApplication.class, args);
}
}
2、自定义StringEncryptor
/**
* 配置StringEncryptor
*/
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("8ewrIOPIECD8919232FEEAK8923251");
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.salt.NoOpIVGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


