2021-07-30


前言

记载一次springboot 框架数据库密码加密过程

一、jasypt 自定义加密算法

  近期遇到一个项目,要求的安全性较高,需要将springboot项目中的数据库密码加密。本来一个简单的任务,整整用了我半天时间,还是太年轻。
项目本来用的jasypt默认的加密方式,但需求方认为安全性不够,好吧,改!没做过怎么办,百度,不知道咋想的,竟然没有继续使用jasypt的加密方式,改用了druid,有费了大量的时间,不过有收获,也不亏。

下面还是先记录下jasypt的加密方式:
1、引入依赖

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

2、在application.yml文件中加入配置文件

#数据库配置文件加密
jasypt:
  encryptor:
    ## 实现jasypt加密解密的类
    ## 这里的类是自己定义的加密算法的类需要继承StringEncryptor类
    bean: desencrypt

3、密码经过自定义的加密算法后,放到ENC中,解析是会根据ENC查找对应的密码

url: jdbc:mysql://localhost:3306/unionpay_project?serverTimezone=UTC
username: root
password: ENC(4yXsSiLdzGU=)

4、加密与解密的类

@Component("desencrypt")
public class DESEncrypt implements StringEncryptor {

    private String secret = "qfysvf4a453402314a0445d4f4c76ba49311cea";

    @Override
    public String encrypt(String s) {
        try {
            byte[] decrypt = EncryptUtil.encrypt(s.getBytes(), s);
            return new String(decrypt);
        } catch (Exception e) {
            e.printStackTrace();
            return s;
        }
    }

    @Override
    public String decrypt(String encrypted) {
        try {
            byte[] encrypt = EncryptUtil.decrypt(encrypted, secret);
            return new String(encrypt);
        } catch (Exception e) {
            e.printStackTrace();
            return encrypted;
        }
    }
}

二、Druid 加密方法

1.引入依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

2.自定义方法注入

  我看网上许多的通过通过配置文件的方式进行加密类的注入,但是我尝试过许多次都失败了,不知道哪里的问题,只好改变方式。在一个配置类中通过代码的方式注入。(一定要注意导入的druid版本号)

@Bean("dataSource")
@ConfigurationProperties("spring.datasource.druid")
    public DruidDataSource initDataSource() {
        DruidDataSource build = DruidDataSourceBuilder.create().build();
        //dbPasswordCallback 为自定义的解密方法类
        build.setPasswordCallback(dbPasswordCallback);
        return build;
    }

  自定义解密类:

@Component
@Slf4j
public class DbPasswordCallback extends DruidPasswordCallback {
    @Value("4a453402314a01f4c76ba49311cea")
    private String secretKey;
    @Value("${spring.datasource.password}")
    private String password;

    @Override
    public void setProperties(Properties properties) {
        if (StringUtils.isNotEmpty(password) && StringUtils.isNotEmpty(secretKey)) {
            try {
                //密码解密
                byte[] decrypt = EncryptUtil.decrypt(password, secretKey);
                setPassword(new String(decrypt).toCharArray());
            } catch (Exception e) {
                setPassword(password.toCharArray());
            }
        }
    }
}

总结

  项目密码加密在开发中还是经常使用,这里记录一次免得以后忘记。以后还要多多努力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值