SpringBoot 集成 Jasypt 對數(shù)據(jù)庫加密以及踩坑的記錄分享
前言
密碼安全是非常重要的,因此我們在代碼中往往需要對密碼進(jìn)行加密,以此保證密碼的安全
加依賴
<!-- jasypt --> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>
加配置
# jasypt 密碼加密配置 jasypt: encryptor: # 加密鹽值 password: jasypt # 加密算法設(shè)置 3.0.0 以后 algorithm: PBEWithMD5AndDES iv-generator-classname: org.jasypt.iv.NoIvGenerator
PS:可以看到配置中特意配置了加密算法,原因是官方在 3.0.0 以后更改了加密算法,所以假如你不設(shè)置的話,使用網(wǎng)上的方法加密出來的密碼啟動就會報錯,如圖:
官方 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 進(jìn)行加解密
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; public class JasyptUtil { /** * Jasypt生成加密結(jié)果 * @param password 配置文件中設(shè)定的加密鹽值 * @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 配置文件中設(shè)定的加密鹽值 * @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); } }
數(shù)據(jù)庫配置解密
用官方提供的保留字 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
到此這篇關(guān)于SpringBoot 集成 Jasypt 對數(shù)據(jù)庫加密以及踩坑的記錄分享的文章就介紹到這了,更多相關(guān)SpringBoot 集成 Jasypt 對數(shù)據(jù)庫加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Spring boot + jQuery上傳文件(kotlin)功能實(shí)例詳解
本文通過實(shí)例代碼給大家介紹了使用Spring boot + jQuery上傳文件(kotlin) 功能,需要的朋友可以參考下2017-07-07springboot項(xiàng)目打成jar包后無法獲取static下的靜態(tài)資源文件的問題分析
這篇文章主要介紹了springboot項(xiàng)目打成jar包后無法獲取static下的靜態(tài)資源文件的問題分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08Java 實(shí)現(xiàn)鏈表結(jié)點(diǎn)插入
這篇文章主要介紹了Java 實(shí)現(xiàn)鏈表結(jié)點(diǎn)插入操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02Java BufferedReader相關(guān)源碼實(shí)例分析
這篇文章主要介紹了Java BufferedReader相關(guān)源碼實(shí)例分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10Java Map 按照Value排序的實(shí)現(xiàn)方法
Map是鍵值對的集合接口,它的實(shí)現(xiàn)類主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。這篇文章主要介紹了Java Map 按照Value排序的實(shí)現(xiàn)方法,需要的朋友可以參考下2016-08-08SpringBoot中@ConditionalOnProperty的使用及作用詳解
這篇文章主要介紹了SpringBoot中@ConditionalOnProperty的使用及作用詳解,@ConditionalOnProperty通過讀取本地配置文件中的值來判斷 某些 Bean 或者 配置類 是否加入spring 中,需要的朋友可以參考下2024-01-01Springboot整合Jedis實(shí)現(xiàn)單機(jī)版或哨兵版可切換配置方法
這篇文章主要介紹了Springboot整合Jedis實(shí)現(xiàn)單機(jī)版或哨兵版可切換配置方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-11-11