使用jasypt工具包给springboot项目敏感信息加密

原文地址:开发者导航 · 你想要的,我全都有!

前言

在我们的应用程序,为了防止hardcode,通常会把程序中可能会变的,或者与环境相关的信息抽离出来,从而形成配置文件。SpringBoot配置文件中的内容通常情况下是明文显示,安全性就比较低一些。在application.properties或application.yml文件中,往往含有比较敏感的信息,比如mysql登连接信息,redis登陆密码以及各种第三方的密钥等等。这些数据一旦泄露,造成的影响将是非常巨大的。

jasypt简介

jasypt全称是Java Simplified Encryption,一个用于加密的Java类库,是一个国外的大神写的工具包,特点是:

  • 基于标准的加密算法,支持单向加密与反向加解密

  • 与Hibernate可以无缝集成

  • 适用于使用Spring应用的基础,与SpringSecurity可以实现无缝集成

  • 提供加密应用的配置文件的集成

  • 提供多处理器/多核系统中高性能加密的特定功能

  • 开放与任何JCE(Java Cryptography Extension)实现相同的API

如何使用呢?

第一步 :项目中加入依赖包

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

第二步:生成密文

随便写一个测试类,定义一个main方法,内容如下,其中www.jiagou1216.com是秘钥(也成为盐值),可以为任意字符。

package com.afip;
import org.jasypt.util.text.BasicTextEncryptor;
/**
 * @author :架构师小跟班
 * @date :Created in 2019/11/14 0014 20:29
 * @description:
 * @modified By:www.jiagou1216.com
 */
public class Encryptor {
    public static void main(String[] args) {
        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        textEncryptor.setPassword("www.jiagou1216.com");
        //加密
        String url = textEncryptor.encrypt("jdbc:mysql://192.168.1.12:3306/afip?useUnicode=true&characterEncoding=utf8");
        String name = textEncryptor.encrypt("root");
        String password = textEncryptor.encrypt("123456");
        System.out.println("密文:" + url);
        System.out.println("密文:" + name);
        System.out.println("密文:" + password);
        //解密
        String durl = textEncryptor.decrypt(url);
        String dname = textEncryptor.decrypt(name);
        String dpassword = textEncryptor.decrypt(password);
        System.out.println("反译:" + durl);
        System.out.println("反译:" + dname);
        System.out.println("反译:" + dpassword);
    }
}

执行main方法生成密文,多执行几次会发现生成的密文每次都不一样,但是同一个原文生成的不同密文反译后都是一样的

第三步:修改配置文件application-dev.yml

1)添加秘钥

2)修改需要加密的配置项,其中ENC()为固定写法,括号里的内容为上面生成的密文。

如果说你的盐值(jasypt.encryptor.password)写在配置文件中不安全可以使用以下两个办法:

1)可以在项目部署的时候使用命令传入salt(盐)值

java -jar -Djasypt.encryptor.password=www.jiagou1216.com xxx.jar

2)在服务器的环境变量里配置,进一步提高安全性

vim /etc/profile

文件末尾插入

export JASYPT_PASSWORD = www.jiagou1216.com

编译 

source /etc/profile

运行 

java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar

结束

jasypt的强大远不止于此,本章只是介绍了该工具最基础的用法,更多功能还是需要读者自己去探索。

在Maven项目使用BCrypt(一种广泛用于密码存储的加密算法)进行密码加密,你可以遵循以下步骤: 1. 添加依赖:首先,在pom.xml文件中添加BCrypt库的依赖。对于Spring Boot项目,可以使用Spring Security Bcrypt Starter: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 或者单独引入BCrypt库: ```xml <dependency> <groupId>org.mindrot</groupId> <artifactId>jbcrypt</artifactId> <version>0.4.5</version> <!-- 根据实际版本替换 --> </dependency> ``` 2. 配置加密工具:如果你使用Spring Security,可以在配置类中注入BCryptPasswordEncoder并创建一个Bean: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.task.TaskExecutor; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @Configuration public class AppConfig { @Autowired private TaskExecutor taskExecutor; @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } ``` 3. 加密用户密码:在保存用户密码时,调用`BCryptPasswordEncoder.encode()`方法对密码进行加密: ```java String plainPassword = "your-password"; String hashedPassword = passwordEncoder().encode(plainPassword); ``` 4. 验证密码:当用户登录时,使用`BCryptPasswordEncoder.matches()`方法对比输入的密码和存储的哈希值: ```java boolean isCorrect = passwordEncoder().matches(inputPassword, storedHashedPassword); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发者导航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值