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: PBEWithMD5AndDES iv-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=false username: root password: ENC(加密后的密码) driver-class-name: com.mysql.jdbc.Driver
到此这篇关于SpringBoot 集成 Jasypt 对数据库加密以及踩坑的记录分享的文章就介绍到这了,更多相关SpringBoot 集成 Jasypt 对数据库加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
详解如何使用Spring的@FeignClient注解实现通信功能
SpringBoot是一个非常流行的Java框架,它提供了一系列工具来使这种交互无缝且高效,在这些工具中,@FeignClient注解因其易用性和强大的功能而脱颖而出, 在这篇文章中,我们将探讨如何使用Spring的@FeignClient注解进行客户端-服务器通信,需要的朋友可以参考下2023-11-11JavaMail发送(带图片和附件)和接收邮件实现详解(四)
这篇文章主要为大家详细介绍了JavaMail带图片和附件的发送和接收邮件实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-10-10maven中springboot-maven-plugin的5种打包方式
本文主要介绍了maven中springboot-maven-plugin的5种打包方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-09-09
最新评论