Jasypt 配置文件加密的用法

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Jasypt 配置文件加密的用法

Jasypt 是一个用于配置文件加密的 Java 库。它可以用来加密和解密配置文件中的敏感信息,如数据库密码、API 密钥等。

使用 Jasypt 加密配置文件的步骤如下:

  1. 引入 Jasypt 依赖 首先,在你的项目的构建文件中添加 Jasypt 依赖。如果使用 Maven,可以在 pom.xml 文件中添加以下依赖:
<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt</artifactId>
    <version>1.9.3</version>
</dependency>
  1. 创建加密密钥 Jasypt 需要一个密钥来对配置文件进行加密和解密。可以使用 Jasypt 提供的工具来生成加密密钥。执行以下命令生成密钥:
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="your-encryption-key" password=your-password algorithm=PBEWithMD5AndDES

这里,input 参数是你要加密的密钥,password 参数是用于保护密钥的密码,algorithm 参数是加密算法。执行该命令后,会生成一个加密后的密钥。

  1. 配置文件加密 将要加密的敏感信息添加到你的配置文件中,然后使用 Jasypt 进行加密。在配置文件中,将待加密的信息用 ENC(加密后的内容) 包裹起来。例如,如果你要加密数据库密码,在配置文件中的配置项可以这样写:
db.password=ENC(加密后的密码)
  1. 解密配置文件 在你的 Java 代码中,使用 Jasypt 进行解密。以下示例演示了如何解密配置文件并获取数据库密码:
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.properties.EncryptableProperties;
import java.io.FileInputStream;
import java.util.Properties;
 
public class AppConfig {
 
  public static void main(String[] args) throws Exception {
    // 创建加密解密器
    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    encryptor.setPassword("your-password"); // 对应第2步设置的密码
    String encryptedPropertyFile = "path/to/encrypted-file.properties";
    
    // 创建加密文件的输入流
    FileInputStream fis = new FileInputStream(encryptedPropertyFile);
    
    // 加载加密文件
    Properties properties = new EncryptableProperties(encryptor);
    properties.load(fis);
    
    // 获取解密后的数据库密码
    String dbPassword = properties.getProperty("db.password");
    System.out.println(dbPassword);
  }
}
  1. 运行代码 运行以上代码将会输出解密后的数据库密码。

以上就是使用 Jasypt 进行配置文件加密的基本用法。通过加密配置文件中的敏感信息,可以更好地保护应用程序的安全性。

要在 Spring Boot 项目中使用 Jasypt

进行配置文件加密,可以按照以下步骤进行操作:

  1. 引入 Jasypt 依赖 在你的项目的构建文件中添加 Jasypt 依赖。如果使用 Maven,可以在 pom.xml 文件中添加以下依赖:
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>


  1. 创建加密密钥 同样需要创建一个加密密钥,可以使用 Jasypt 提供的工具来生成加密密钥,执行以下命令生成密钥:
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="your-encryption-key" password=your-password algorithm=PBEWithMD5AndDES

这里,input 参数是你要加密的密钥,password 参数是用于保护密钥的密码,algorithm 参数是加密算法。执行该命令后,会生成一个加密后的密钥。

  1. 配置加密密钥 在你的 Spring Boot 项目的配置文件(如 application.properties 或 application.yml)中,添加以下属性配置:

application.properties:

jasypt.encryptor.password=your-password // 第2步设置的密码

application.yml:

jasypt:
  encryptor:
    password: your-password # 第2步设置的密码
  1. 配置文件加密 在配置文件中,将待加密的敏感信息用 ENC(加密后的内容) 包裹起来。例如,如果你要加密数据库密码,在配置文件中的配置项可以这样写:
db.password=ENC(加密后的密码)
  1. 解密配置文件 在你的 Spring Boot 项目的代码中,可以直接注入 EncryptableEnvironment 类,并使用它来解密配置文件中的值。以下示例演示了如何获取解密后的数据库密码:
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;
 
@SpringBootApplication
public class AppConfig {
 
  @Autowired
  private StringEncryptor encryptor;
 
  public static void main(String[] args) {
    AppConfig app = new AppConfig();
    app.run();
  }
 
  public void run() {
    String decryptedPassword = encryptor.decrypt("ENC(加密后的密码)");
    System.out.println(decryptedPassword);
  }
}

通过在加密后的密码前加上 ENC 注解,Spring Boot 将自动解密该值并注入到 StringEncryptor 对象中。


以上就是在 Spring Boot 项目中使用 Jasypt 进行配置文件加密的基本用法。通过 Jasypt,可以更好地保护应用程序中敏感的配置信息。

重写 Jasypt 解密方法

要重写 Jasypt 解密方法,你可以自定义一个解密器来实现自定义的解密逻辑。以下是一个示例:

  1. 创建自定义解密器类
import org.jasypt.encryption.StringEncryptor;
import org.springframework.stereotype.Component;
 
@Component("customDecryptor") // 可以根据需要指定其他注解,如 Service
public class CustomDecryptor implements StringEncryptor {
 
    @Override
    public String decrypt(String encryptedMessage) {
        // 在这里实现你的自定义解密逻辑
        
        // 例如,实现一个简单的逆向字符串操作
        StringBuilder decryptedMessage = new StringBuilder(encryptedMessage);
        return decryptedMessage.reverse().toString();
    }
 
    @Override
    public String encrypt(String message) {
        throw new UnsupportedOperationException("Encryption is not supported with this decryptor");
    }
    
    // 可以根据需要实现其他方法
}
  1. 配置使用自定义解密器 在你的 Spring Boot 项目的配置文件中,配置使用自定义的解密器。例如,如果你使用的是 application.properties,可以添加以下配置:
jasypt.encryptor.bean=customDecryptor

这样,Spring Boot 将使用你定义的 CustomDecryptor 类来进行解密操作。

  1. 使用自定义解密器 在你的代码中可以使用 StringEncryptor 对象来解密加密后的内容。例如,以下示例演示了如何在 Spring Boot 项目中使用自定义解密器来解密数据库密码:
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;
 
@SpringBootApplication
public class AppConfig {
 
  @Autowired
  private StringEncryptor encryptor;
 
  public static void main(String[] args) {
    AppConfig app = new AppConfig();
    app.run();
  }
 
  public void run() {
    String encryptedPassword = "your-encrypted-password";
    String decryptedPassword = encryptor.decrypt(encryptedPassword);
    System.out.println(decryptedPassword);
  }
}

通过注入自定义的 StringEncryptor 对象,你可以在代码中使用自定义解密器来解密加密后的内容。

通过上述步骤,你可以重写 Jasypt 的解密方法,并根据你的需求自定义解密逻辑。


目录
相关文章
|
6月前
|
安全 API 开发工具
oss加密的配置方法
阿里云OSS提供多种加密选项:SSE-OSS(默认或对象级AES-256加密)、SSE-KMS(使用KMS托管CMK)、临时密钥加密和客户端加密(CSE)。可通过控制台或API设置Bucket策略,使用HTTP头部指定加密方式。KMS和临时密钥可能涉及更复杂的密钥管理和权限配置。
677 5
|
6月前
|
druid Java 数据库
druid+springboot加解密Druid链接池配置加密密码链接数据库
druid+springboot加解密Druid链接池配置加密密码链接数据库
327 0
|
3月前
|
jenkins 应用服务中间件 持续交付
如何配置 Nginx 作为 Jenkins 的反向代理并启用 SSL 加密
如何配置 Nginx 作为 Jenkins 的反向代理并启用 SSL 加密
194 8
|
3月前
|
JSON 算法 API
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
|
3月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
320 0
|
5月前
|
存储 安全 API
使用KMS为Apollo配置中心敏感配置加密的最佳实践
使用KMS为Apollo配置中心敏感配置加密的最佳实践
698 2
|
6月前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
|
6月前
|
存储 Java 数据库
SpringBoot使用jasypt实现数据库配置加密
这样,你就成功地使用Jasypt实现了Spring Boot中的数据库配置加密,确保敏感信息在配置文件中以加密形式存储,并在应用启动时自动解密。
406 2
|
6月前
|
Java 数据库 数据安全/隐私保护
SpringBoot项目使用jasypt加解密的方法加密数据库密码
SpringBoot项目使用jasypt加解密的方法加密数据库密码
117 0
|
6月前
|
编解码 Java Nacos
nacos常见问题之密码加密配置如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
1433 0