Java使用Jasypt进行加密和解密的技术指南

 更新时间:2025年03月03日 08:36:09   作者:拾荒的小海螺  
Jasypt (Java Simplified Encryption) 是一个简化 Java 应用中加密工作的库,它支持加密和解密操作,易于与 Spring Boot 集成,通过 Jasypt,可以安全地管理敏感信息,比如数据库密码、API 密钥等,本文介绍了Java使用Jasypt进行加密和解密的技术指南,需要的朋友可以参考下

1、简述

Jasypt (Java Simplified Encryption) 是一个简化 Java 应用中加密工作的库。它支持加密和解密操作,易于与 Spring Boot 集成。通过 Jasypt,可以安全地管理敏感信息,比如数据库密码、API 密钥等。

2、核心功能

  • 简化的加解密操作:通过易用的 API 提供加密和解密功能。
  • 多种算法支持:如 AES、PBE 等。
  • 支持属性加密:与 Spring 的 @Value 注解无缝集成,直接解密配置文件中的敏感信息。
  • 安全性高:支持盐值(Salt)和迭代计数(Iteration Count)以增强安全性。

3、实践样例

3.1 Maven 依赖

添加以下依赖到你的 pom.xml 文件中:

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

3.2 配置应用

  • 配置文件
    application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=ENC(encrypted_password)
  • 加密工具
    使用 jasypt-spring-boot 提供的 CLI 工具加密密码:
jasypt encrypt input=my_password password=my_secret_key algorithm=PBEWithMD5AndDES

输出结果类似:

ENC(3bf2jN+/NfM45y8OeM7TfQ==)

3.3 动态设置加密器

在 Spring Boot 项目中,可以通过配置动态设置加密器的属性。

application.properties:

jasypt.encryptor.password=my-strong-secret-key
jasypt.encryptor.algorithm=PBEWithHMACSHA512AndAES_256
jasypt.encryptor.key-obtention-iterations=2000
jasypt.encryptor.pool-size=4
jasypt.encryptor.salt-generator-classname=org.jasypt.salt.RandomSaltGenerator

自定义配置类:

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.salt.RandomSaltGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JasyptConfig {
    @Bean("jasyptStringEncryptor")
    public StringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setPassword("my-strong-secret-key");
        encryptor.setAlgorithm("PBEWithMD5AndTripleDES");
        encryptor.setKeyObtentionIterations(2000);
        encryptor.setPoolSize(4);
        encryptor.setSaltGenerator(new RandomSaltGenerator());
        return encryptor;
    }
}

4、加密算法

4.1 使用高级算法进行加密和解密

默认的 PBEWithMD5AndDES 算法安全性不够高,可以使用更安全的 PBEWithHMACSHA512AndAES_256。

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

public class AdvancedJasyptExample {
    public static void main(String[] args) {
        // 创建加密器
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword("my-strong-secret-key"); // 设置密钥
        encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256"); // 设置高级算法

        // 加密
        String sensitiveData = "SuperSecretPassword123";
        String encryptedData = encryptor.encrypt(sensitiveData);
        System.out.println("Encrypted Data: " + encryptedData);

        // 解密
        String decryptedData = encryptor.decrypt(encryptedData);
        System.out.println("Decrypted Data: " + decryptedData);
    }
}

4.2 使用 Salt 和 Iteration Count 增强加密

Salt(盐值)和 Iteration Count(迭代计数)可以显著提高加密的安全性。

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.salt.RandomSaltGenerator;

public class SaltAndIterationExample {
    public static void main(String[] args) {
        // 创建加密器
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setPassword("my-strong-secret-key");
        encryptor.setAlgorithm("PBEWithMD5AndTripleDES");
        encryptor.setPoolSize(4); // 线程池大小

        // 设置盐值生成器和迭代次数
        encryptor.setSaltGenerator(new RandomSaltGenerator());
        encryptor.setKeyObtentionIterations(1000); // 增加破解难度

        // 加密
        String sensitiveData = "ImportantDataToEncrypt";
        String encryptedData = encryptor.encrypt(sensitiveData);
        System.out.println("Encrypted Data: " + encryptedData);

        // 解密
        String decryptedData = encryptor.decrypt(encryptedData);
        System.out.println("Decrypted Data: " + decryptedData);
    }
}

5、应用场景

Jasypt的优势在于其简单易用的API和强大的加密功能。它提供了多种加密器的选择,可以根据具体需求选择适合的加密器。同时,Jasypt还支持敏感数据的加密配置,可以将加密后的敏感数据存储在配置文件中,提高了应用程序的安全性。

Jasypt的应用场景包括但不限于以下几个方面:

  • 数据库密码加密:将数据库连接密码加密存储,提高数据库的安全性。
  • API密钥保护:将API密钥加密存储,防止密钥泄露导致的安全风险。
  • 用户密码加密:将用户密码加密存储,保护用户的隐私数据。
  • 配置文件加密:将应用程序的配置文件中的敏感数据加密存储,提高应用程序的安全性。

6、总结

Jasypt 是一个强大且易用的加密工具,特别适合 Java 应用中敏感信息的加密需求。在实际项目中,通过 Jasypt 提供的功能,可以在不改动大量代码的情况下,提高系统的安全性。

到此这篇关于Java使用Jasypt进行加密和解密的技术指南的文章就介绍到这了,更多相关Java Jasypt加密和解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot3.x嵌入MongoDB进行测试的步骤详解

    SpringBoot3.x嵌入MongoDB进行测试的步骤详解

    本文介绍了在 Spring Boot 应用中使用Flapdoodle Embed Mongo进行 MongoDB 测试的方法,包括Embed Mongo 的概念,添加依赖、配置、运行测试的步骤,还列举了其优势如快速启动关闭、环境一致、无需外部依赖等,以及注意事项和结论,需要的朋友可以参考下
    2024-12-12
  • springboot如何解决跨域后session获取不到sessionId不一致

    springboot如何解决跨域后session获取不到sessionId不一致

    这篇文章主要介绍了springboot如何解决跨域后session获取不到sessionId不一致问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Spring定义Bean范围的三种方式

    Spring定义Bean范围的三种方式

    在Spring框架中,Bean的作用域(scope)决定了一个Bean实例的生命周期和可见性,Spring支持多种作用域,最常用的是singleton和prototype,此外还有request、session等Web应用相关的特定作用域,本文给大家介绍了Spring定义Bean范围的三种方式,需要的朋友可以参考下
    2024-08-08
  • 使用Java实现裁剪和压缩PPT中的图片

    使用Java实现裁剪和压缩PPT中的图片

    在工作中,PPT演示文稿广泛应用于报告、课程内容展示以及项目计划,然而,当 PPT 文件中包含大量图片时,文件大小常常大幅增加,导致加载缓慢、分享困难等问题,因此在这篇文章中,我们将详细介绍如何使用Java实现裁剪和压缩PPT中的图片,需要的朋友可以参考下
    2026-03-03
  • 解读Jvm的内存结构与GC及jvm参数调优

    解读Jvm的内存结构与GC及jvm参数调优

    这篇文章主要介绍了解读Jvm的内存结构与GC及jvm参数调优方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Spring boot Mybatis 整合(完整版)

    Spring boot Mybatis 整合(完整版)

    本文是一篇比较完整的版本通过图文并茂的形式给大家介绍了Spring boot Mybatis 整合过程,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-09-09
  • 手把手教你排查解决Java编译报错:找不到符号

    手把手教你排查解决Java编译报错:找不到符号

    这篇文章主要介绍了手把手教你排查解决Java编译报错:找不到符号的相关资料,提供了排查步骤和解决方法,通过这些步骤,开发者可以有效地找到并解决编译器抛出的找不到符号错误,从而提高开发效率,需要的朋友可以参考下
    2025-04-04
  • Kotlin实现静态方法

    Kotlin实现静态方法

    这篇文章主要介绍了Kotlin实现静态方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Java中使用DOM4J生成xml文件并解析xml文件的操作

    Java中使用DOM4J生成xml文件并解析xml文件的操作

    这篇文章主要介绍了Java中使用DOM4J来生成xml文件和解析xml文件的操作,今天通过代码给大家展示了解析xml文件和生成xml文件的方法,需要的朋友可以参考下
    2021-09-09
  • 微信开发--自定义菜单查询返码乱码的解决方法

    微信开发--自定义菜单查询返码乱码的解决方法

    本篇文章主要介绍了微信开发--自定义菜单查询返码乱码的解决方法,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03

最新评论