700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > boot数据加解密 spring_SpringBoot 集成 Jasypt 对数据库加密以及踩坑

boot数据加解密 spring_SpringBoot 集成 Jasypt 对数据库加密以及踩坑

时间:2023-12-31 09:32:44

相关推荐

boot数据加解密 spring_SpringBoot 集成 Jasypt 对数据库加密以及踩坑

前言

密码安全是非常重要的,因此我们在代码中往往需要对密码进行加密,以此保证密码的安全

加依赖

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

加配置

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

PS:可以看到配置中特意配置了加密算法,原因是官方在 3.0.0 以后更改了加密算法,所以假如你不设置的话,使用网上的方法加密出来的密码启动就会报错,如图:

官方 issue:Failed to bind properties under ‘spring.datasource.password’ to java.lang.String` #154

版本在 3.0.0 之前的 Jasypt

需要额外添加 Jasypt 的加密盐值配置到 Tomcat

-Djasypt.encryptor.password=xxxx

工具类

如果你想手动使用 Jasypt 进行加解密

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;public class JasyptUtil {/*** Jasypt生成加密结果* @param password 配置文件中设定的加密盐值* @param value 加密值* @return*/public static String encyptPwd(String password,String value){PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();encryptor.setConfig(cryptor(password));String result = encryptor.encrypt(value);return result;}/*** 解密* @param password 配置文件中设定的加密盐值* @param value 解密密文* @return*/public static String decyptPwd(String password,String value){PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();encryptor.setConfig(cryptor(password));String result = encryptor.decrypt(value);return result;}public static SimpleStringPBEConfig cryptor(String password){SimpleStringPBEConfig config = new SimpleStringPBEConfig();config.setPassword(password);config.setAlgorithm("PBEWithMD5AndDES");config.setKeyObtentionIterations("1000");config.setPoolSize("1");config.setProviderName("SunJCE");config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");config.setStringOutputType("base64");return config;}public static void main(String[] args) {// 加密String encPwd = encyptPwd("jasypt", "123456");// 解密String decPwd = decyptPwd("jasypt", encPwd);System.out.println(encPwd);System.out.println(decPwd);}}

数据库配置解密

用官方提供的保留字ENC,将加密的密码包裹即可

spring:datasource:url: jdbc:mysql://xx.xx.xx.xx/xxxx?useUnicode=true&characterEncoding=utf8&useSSL=falseusername: rootpassword: ENC(加密后的密码)driver-class-name: com.mysql.jdbc.Driver

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。