SpringBoot中使用jasypt加解密的示例分享

乔欣 SpringBoot 发布时间:2023-03-12 21:08:24 阅读数:2601 1
下文笔者讲述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;
 }
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202303/6014.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者