springboot项目利用Jasypt 实现数据库密码加密

在java后台服务开发过程中,数据库密码,访问第三方服务的appkey等信息一般配置在配置文件中,为了安全利用Jasypt可以很方便的加密保存

第一步:

应用maven的配置文件:

<!-- jasypt 配置文件敏感信息加解密 -->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

第二,实现配置类

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 用于数据库密码加密
 */
@Configuration
public class JasyptConfiguration {
    /**
     * 加密密码
     */
    private final static String PASSWORD_SALT = "12346";

    @Bean("jasyptStringEncryptor")
    public StringEncryptor stringEncryptor() {
//        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
//        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
//        config.setPassword(PASSWORD_SALT);                // 加解密保持一致
//        config.setAlgorithm("PBEWithMD5AndDES");
//        config.setKeyObtentionIterations("1000");
//        config.setPoolSize("1");
//        config.setProviderName("SunJCE");
//        config.setStringOutputType("base64");
//        encryptor.setConfig(config);
        return createEncryptor();
    }

//    public static void main(String[] args) {
//        Scanner input = new Scanner(System.in, StandardCharsets.UTF_8.name());
//        log.info("输入需要明文密码:");
//        String plain = input.nextLine();
//        String strEncrypted = encrypt(plain);
//        log.info("加密后密码:" + strEncrypted);
//        log.info("解密密码确认:" + decrypt(strEncrypted));
//    }
//
//    private static String encrypt(String plain) {
//        return createEncryptor().encrypt(plain);
//    }
//
//    private static String decrypt(String encrypted) {
//        return createEncryptor().decrypt(encrypted);
//    }

    private static PooledPBEStringEncryptor createEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(PASSWORD_SALT);
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setProviderClassName(null);
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }

}

其中在配置类中,需要注意的是config.setAlgorithm("PBEWithMD5AndDES");这个就是设置加密使用算法,很多文章中说可以使用配置文件的方式来使用,如下:

# jasypt 密码加密配置
jasypt:
  encryptor:
    # 加密盐值
    password: jasypt
    # 加密算法设置 3.0.0 以后
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

也是可以的,但是注意需要配置algorithm: PBEWithMD5AndDES,3.0后默认支持的算法为PBEWITHHMACSHA512ANDAES_256,SHA512加AES,需要jdk9以后才默认支持,如果还说jdk8的小伙伴们,需要特别注意这里面的坑

这些配置完了,就可以在我们的配置文件里面使用ENC(xxx), 加密串来使用了

比如数据的密码

spring.datasource.password=ENC(ducLJnCSD2UFnlszFdd5yQ==)

参考文章,如果在使用过程中还有疑问,可以参考下面的博客,他们写的更详细,更棒

https://www.cnblogs.com/zt007/p/18123319
https://blog.csdn.net/lhmyy521125/article/details/139475216

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值