java 对字符串加密解密可双击运行的jar_使用Jasypt加密Spring配置文件及其注意事项

3ff1fafc4bfc7b7bc5d6d4b38fd0f9d9.png
技术公众号:Java In Mind(Java_In_Mind),欢迎关注!

问题

在我们的应用程序,为了防止hardcode,通常会把程序中可能会变的,或者与环境相关的信息抽离出来,从而形成配置文件。

在Java应用中通常就是properties文件或者yml文件之类的,但是这部分信息由于抽离独立开来将会变得比较容易泄露,而配置文件中往往含有比较敏感的信息,例如,数据库密码,这些数据一旦泄露有可能造成严重的后果;那么自然而然的,我们就会想到对配置文件的敏感信息进行加密。

Jasypt简介

Jasypt(Java Simplified Encryption),一个用于加密的Java类库,目的就是让开发者很简便的将加密功能引入自己的项目中来,而不需要去明白具体的加密知识,其有如下特点:

  • 基于标准的加密算法,支持单向加密与反向加解密
  • 与Hibernate可以无缝集成
  • 适用于使用Spring应用的基础,与SpringSecurity可以实现无缝集成
  • 提供加密应用的配置文件的集成
  • 提供多处理器/多核系统中高性能加密的特定功能
  • 开放与任何JCE(Java Cryptography Extension)实现相同的API

Spring Boot集成Jasypt加密配置文件

配置

SpringBoot集成Jasypt配置很简单,只需引入依赖,然后配置Jasypt相关属性参数即可:

  • Maven
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>
  • 配置文件加密
# 如配置,application.properties
application.author=ENC(9afnWGGYyzZN38vYYfYx1ZM9ql//Vp+8)
  • 启动应用时,配置系统属性
java -jar foo.jar -Djasypt.encryptor.password=HelloWorld

加密

那么,配置文件中的加密密文该如何获取呢?Jasypt官方提供了CLI工具,通过脚本可以生成对应的密文,具体操作如下:

  • 从Github下载Jasypt:https://github.com/jasypt/jasypt
  • 解压进入/bin目录
  • 根据需要执行对应脚本

例如,本例子的密文生成,默认使用PBEWithMD5AndDES算法:

$ sh encrypt.sh input=sevenlin password=HelloWorld

----ENVIRONMENT-----------------

Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.73-b02


----ARGUMENTS-------------------

input: sevenlin

password: HelloWorld


----OUTPUT----------------------

lUmhU/2EgreTZVdtWFCnqE86tXuo6OMp
  • 或者,自己写个简单的类来生成
public class EncryptDemo {
public static void main(String[] args) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword("HelloWorld");
String enc = encryptor.encrypt("sevenlin");
System.out.println(enc);
}
}

使用&验证

  • 写个Service验证
@Service
@Slf4j
public class JasyptDemoService {

@Value("${application.author}")
private String author;

@PostConstruct
public void print() {
log.info("===================================================================");
log.info("application.author:{}", author);
log.info("===================================================================");
}

//...

}
  • 结果,验证成功:
===================================================================
application.author:sevenlin
===================================================================

注意事项

使用时将密钥与密文分开配置

我看过有的在使用Jasypt的时候,将密钥与密文都放在一个配置文件里,那不等于把钥匙放在门口一样的意思么,虽然加密了,但是只要配置文件泄露了,那么就可以通过密钥来实现解密,达不到保护敏感信息的目的,可以有以下几种方式来配置密钥:

  • 系统属性:java -jar foo.jar -Djasypt.encryptor.password=HelloWorld
  • 运行参数:java -jar foo.jar --jasypt.encryptor.password=HelloWorld
  • 环境变量
# Linux vim /etc/profile
export jasypt.encryptor.password=HelloWorld

# Windows
系统->更改设置->高级->环境变量->新增:jasypt.encryptor.password=HelloWorld

其他配置项

8c43b5062f5a0a398ee5e5a6bbf14eef.png
常用配置项

其他的可以详看配置类:

com.ulisesbocchio.jasyptspringboot.properties.JasyptEncryptorConfigurationProperties

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值