​Spring Boot 配置文件敏感信息加密:Jasypt 实战

06-01 1135阅读

​​

目录

​​

​1. 为什么需要加密配置文件?​​

​2. Jasypt 快速集成​

​2.1 在xml文件中添加 Maven 依赖​

​2.2 生成加密字符串​​

​编辑

​编辑

​3. 安全最佳实践​

​4. 常见问题​

​Q1:加密后启动报错?​​

​Q2:加密算法如何选择?​​

​5. 总结​


​1. 为什么需要加密配置文件?​​

在 Spring Boot 项目中,敏感信息(如数据库密码、API Key、Redis 密码等)通常直接写在 application.properties 或 application.yml 中(如下图所示),存在以下风险:

  • ​代码泄露​:配置文件可能被上传到 Git,导致密码暴露。
  • ​运维风险​:服务器被入侵时,攻击者可直接读取明文密码。
  • ​合规性要求​:部分行业(如金融、医疗)强制要求加密存储敏感信息。

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    ​解决方案​:使用 ​Jasypt​(Java Simplified Encryption)对敏感信息加密,运行时自动解密,兼顾安全与便捷。


    ​2. Jasypt 快速集成​

    ​2.1 在xml文件中添加 Maven 依赖​

        com.github.ulisesbocchio
        jasypt-spring-boot-starter
        3.0.5
    

    ​2.2 生成加密字符串​​

    那他是如何进行加密解密的呢?然我们进入这个组件的源码(加密部分):

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    input是你要输入的内容,后面的password是密钥,用于给上面inport的内容解密

    我们来看一下下面optional的内容,我们有什么可以选择的呢?

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    解密部分:

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    那么我们如何去使用这样的一个工具呢?

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战
    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    在命令行中输入:

    java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=huihui algorithm=PBEWithMD5AndDES

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    执行这条命令之后:password的内容就是我们指定的密钥

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    将output的内容拷下。接着加入到yml配置文件当中,我们在将root改为我们加密后的内容需要用ENC封装:

        username: ENC(ugBjFufNHYJiS+kbJG1Uvg==) 
        //ENC括号的内容表示这是加密后的内容

    接着,我们用同样的方式加密我们的密码,内容都是一样的,只是input的内容不一样:

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    我们现在已经完成了加密的部分,剩下的就是整个项目需要通过我加密的内容获取其真实的内容,这样,他才可以去访问到数据,那么现在有两种方式去解密:

    方式一:在yml配置文件里面配置好密钥

    jasypt:
      encryptor:
        password: huihui  # 必须与加密时使用的password参数一致
        algorithm: PBEWithMD5AndDES  # 必须与加密时使用的algorithm参数一致
        iv-generator-classname: org.jasypt.iv.NoIvGenerator
        # 注意:PBEWithMD5AndDES是较旧算法,演示环境下没有问题
        # 建议升级到更安全的算法如PBEWithHMACSHA512AndAES_256

    然后再在启动文件处(一般是…Application)加入@EnableEncryptableProperties注解表示开启密码解析。接着再去启动整个应用:

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    数据库数据正确查出。

    但是!!!

    此时,你的密钥就写在yml配置文件中,等于把要是直接给了其他人,让没有权限的人也可以登陆获取数据,所以这种方式很不安全。那么,我们开始另外一种方式。

    方式二:我们手动的在项目启动的时候手动加一个动态参数

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战

    //加入的分别是以下冒号后面的内容
    Name: JASYPT_ENCRYPTOR_PASSWORD  
    Value: huihui
    Name: JASYPT_ENCRYPTOR_ALGORITHM  
    Value: PBEWithMD5AndDES

    接着,yml文件也应该相应的改变:

    jasypt:
      encryptor:
        password: ${JASYPT_ENCRYPTOR_PASSWORD:}  # 从环境变量读取
        algorithm: ${JASYPT_ENCRYPTOR_ALGORITHM:PBEWithMD5AndDES}  # 默认算法
        iv-generator-classname: org.jasypt.iv.NoIvGenerator  # MD5AndDES必须禁用IV

    ​Spring Boot 配置文件敏感信息加密:Jasypt 实战


    数据访问成功!!!


    ​3. 安全最佳实践​

    1. ​密钥管理​:
      • 生产环境务必使用环境变量或云服务(如 AWS KMS)。
      • 禁止将密钥提交到 Git。
      • ​密钥轮换​:

        定期更换加密密钥,并重新加密所有配置。

      • ​日志脱敏​:

        避免敏感信息打印到日志(配置 logback.xml 过滤 ENC(*))。

      • ​最小权限​:

        仅允许必要服务访问密钥。


    ​4. 常见问题​

    ​Q1:加密后启动报错?​​

    • 检查密钥是否一致。
    • 确认依赖版本无冲突(Spring Boot 2.x 用 jasypt-spring-boot-starter 3.x)。

      ​Q2:加密算法如何选择?​​

      • 默认 PBEWithMD5AndDES 已不安全,建议 PBEWithHMACSHA512AndAES_256。

        ​5. 总结​

        通过 Jasypt 可以低成本实现 Spring Boot 配置文件的敏感信息加密,关键步骤:

        1. ​引入依赖​:jasypt-spring-boot-starter。
        2. ​加密数据​:用命令行或代码生成 ENC(密文)。
        3. ​安全存储密钥​:优先用环境变量或启动参数。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码