springboot使用jasypt

现在的springboot项目需要部署到客户的机器上,因为软件是绑定客户机器的,又不允许使用U口接加密狗,只能尝试在软件层面做一些限制,项目启动时抓取客户当前机器的序列号,和数据库中的已授权序列号作对比,对比通过则允许使用,不通过则会在打开系统时,拦截所有请求并提示机器未授权。
所以要做的重点就是保证数据库不让客户进入。一旦进入就可以轻松修改授权设备号。
查看了一些资料后,决定使用jasypt对配置文件中的数据库密码进行加密,从而阻止客户连接数据库。

开发环境

编码环境

eclipse,jdk,maven,都是基本的,不多说

maven依赖

这里我使用的2.0.0版本,据说3.0以上的版本有时会出问题,没用过那种高版本的所以不太了解,3.0以上版本出现问题的,可以尝试版本退到3.0以下。

<dependency>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-spring-boot-starter</artifactId>
	<version>2.0.0</version>
</dependency>

使用这个依赖坐标下载后,本地的maven仓库下会出现两个版本的jar包, 一个是…\com\github\ulisesbocchio目录下的三个文件夹,分别是

  • jssypt-spring-boot
  • jasypt-spring-boot-parent
  • jasypt-spring-boot-starter

三个都是2.0.0版本。

另一个是 …\org\jasypt\jasypt 目录下,只有一个文件夹1.9.2,是1.9.2版本。

Jasypt的使用

加密解密

加密有两种方式,一种是在cmd命令行里直接使用jar命令执行jar包内的方法进行加密,一种是通过代码进行加密。

命令行

使用命令行加密时,推荐使用1.9.2版本的jar包进行加密,使用2.0.0版本会提示ClassNotFound,可能版本不一样,有些类名改掉了,或者新版本的直接调用的老版本部分代码。感兴趣的同学可以扒一下源码。

  1. 进入本地maven仓库的文件夹,进入org\jasypt\jasypt\1.9.2文件夹,会看到有一个jasypt-1.9.2.jar的文件。
  2. 打开cmd命令行,使用cd命令进入刚才打开的文件夹
  3. 输入以下命令:
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=明文密码 password=加密秘钥 algorithm=PBEWithMD5AndDES

input后边跟明文密码,password后边跟密钥,加密解密都需要密钥,algorithm后边是加密方式。
例如输入:

C:>java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=123456 password=salt algorithm=PBEWithMD5AndDES

OUTPUT标题下,会出现加密后的密码:LulaIangH2GCcvjTAAE1qA==
每次重复加密,出现的密码都不同。

解密命令:

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=密文密码 password=加密秘钥 algorithm=PBEWithMD5AndDES

单元测试

除了使用命令行,也可以在代码里使用单元测试的方式加密。

  1. 创建Junit测试类,引入junit包的方法不再详细说明。
@RunWith(SpringRunner.class)
@SpringBootTest
public class JasyptTest {

	@Autowired
	StringEncryptor stringEncryptor;
	
	@Test
	public void testMethod() {
		 StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
	     EnvironmentPBEConfig config = new EnvironmentPBEConfig();
	     //config.setAlgorithm 设置加密方式
	     config.setAlgorithm("PBEWithMD5AndDES");     
	     //config.setPassword 设置密钥
	     config.setPassword("salt");                        
	     standardPBEStringEncryptor.setConfig(config);
	     //设置明文密码
	     String input = "123456";
	     //encrypt是加密方法,decrypt是解密方法
	     String encryptedText = standardPBEStringEncryptor.encrypt(input);
		System.out.println("加密结果: " + encryptedText);
		System.out.println("解密结果: " + standardPBEStringEncryptor.decrypt(encryptedText));
	}
}
  1. 执行后,即可取得加密后的密码

Main方法执行

可以直接在Main方法内调用方法进行加密解密

public static void main(String[] args) {
	BasicTextEncryptor textEncryptor = new BasicTextEncryptor(); 
	textEncryptor.setPassword("salt");
	//要加密的数据(数据库的用户名或密码)
	//encrypt是加密方法,decrypt是解密方法
	String password = textEncryptor.encrypt("123456");
	System.out.println("password:"+password);
	System.out.println(textEncryptor.decrypt(password));
}

配置文件

在使用加密解密方法之前,需要提前在配置文件中新增对应配置。

jasypt:
    encryptor:
        password: salt

数据库连接的密码部分,使用ENC()包裹起来

username: admin
password: ENC(LulaIangH2GCcvjTAAE1qA==)
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver

此时启动项目,连接数据库时会自动对密码进行解密。
项目测试阶段可以把密钥直接写在配置文件中,上线时需要隐藏配置文件中对应的密钥信息,需要把密钥写到代码里。
在启动类中新增如下代码,将配置文件中的明文密钥删除即可。

@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
    PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
    SimpleStringPBEConfig config = new SimpleStringPBEConfig();
    config.setPassword("salt");
    config.setPoolSize("1");
    encryptor.setConfig(config);
    return encryptor;
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jasypt(Java Simplified Encryption)是一个Java加密库,它可以用来加密/解密文本、哈希密码等。Spring Boot提供了对Jasypt的支持,可以在应用程序中轻松使用Jasypt来加密敏感信息。下面是使用Jasypt对MySQL配置文件进行加密的步骤: 1. 引入Jasypt依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 2. 配置加密 在application.properties或者application.yml中添加以下配置: ```properties jasypt.encryptor.password=your_password ``` 其中,your_password是用来加密敏感信息的密码。 3. 加密MySQL配置信息 在application.properties或者application.yml中加入MySQL配置信息,如下: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root ``` 将密码部分使用Jasypt进行加密,如下: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=ENC(加密后的密码) ``` 其中,加密后的密码可以使用Jasypt提供的加密工具进行加密。例如,我们可以使用以下命令生成加密后的密码: ``` java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password="your_password" algorithm=PBEWithMD5AndDES ``` 其中,jasypt-1.9.2.jar是Jasypt的jar包,your_password是用来加密敏感信息的密码。执行以上命令后,会输出加密后的密码。 4. 配置解密 在启动应用程序时,Spring Boot会自动解密加密的敏感信息。因此,我们不需要任何额外的配置来解密MySQL密码。只需将加密后的密码放入配置文件即可。 至此,我们已经成功地使用Jasypt对MySQL配置文件进行了加密。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值