Uylin
发布于 2023-09-04 / 43 阅读 / 0 评论 / 0 点赞

Jasypt

Jasypt

简介

Jasypt也即Java Simplified Encryption是Sourceforge.net上的一个开源项目。Jasypt 1.4的新特性包括:加密属性文件(encryptable properties files)、Spring Framework集成、加密Hibernate数据源配置、新的命令工具、URL加密的Apache wicket集成以及升级文档。

根据Jasypt文档,该技术可用于加密任务与应用程序,例如:加密密码、敏感信息和数据通信、创建完整检查数据的sums、其他性能包括高安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、文本、数字和二进制文件。Jasypt也可以与Acegi Security 整合也即Spring Security。Jasypt亦拥有加密应用配置的集成功能,而且提供一个开放的API从而任何一个Java Cryptography Extension都可以使用Jasypt。

Jasypt还符合RSA标准的基于密码的加密,并提供了无配置加密工具以及新的、高可配置标准的加密工具。

使用

  1. 添加pom依赖
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>${last.version}</version>
</dependency>
  1. 修改application.yml,文件中增加jasypt的秘钥
jasypt:
    encryptor:
        ## 加密秘钥 自定义
        password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7  
  1. 修改配置文件中的需要加密的密码
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()是固定写法,()里面是加密后的信息

高级

将加解密秘钥放在配置文件中是不安全的,有如下几种解决办法:

  1. 在启动类上赋值秘钥:
@SpringBootApplication
public class ProviderApplication {

	public static void main(String[] args) {
		System.setProperty("jasypt.encryptor.password", "EbfYkitulv73I2p0mXI50JMXoaxZTKJ7");
		SpringApplication.run(ProviderApplication.class, args);
	}

}
  1. 自定义StringEncryptor:
/**
 * 配置StringEncryptor
 */
 @Bean("jasyptStringEncryptor")
 public StringEncryptor stringEncryptor() {
	PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
	SimpleStringPBEConfig config = new SimpleStringPBEConfig();
	config.setPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7");
	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;
 }

MAVEN插件

<plugin>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-maven-plugin</artifactId>
	<version>${last.version}</version>
</plugin>

mvn jasypt:encrypt -Djasypt.encryptor.password="lE1rl5K$"