版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第如何給yml配置文件的密碼加密(SpringBoot)目錄1.低版本2.x1)引入jar包2)生成密碼3)測(cè)下解密4)yml配置5)測(cè)測(cè)登錄2.高版本3.x1)引入jar包2)生成密碼3)yml配置最近在忙著解決規(guī)約掃描的問題,其一就是這個(gè)明文密碼必須加密的問題,一般是數(shù)據(jù)庫的配置。首先我用的是默認(rèn)的PBEWithMD5AndDES默認(rèn)的MD5加密方式,
弄好之后有要求使用AES_256/SM2/SM4等高級(jí)的算法加密,于是后來又升級(jí)了jar包使用默認(rèn)的PBEWITHHMACSHA512ANDAES_256.
JDK版本-1.8
1.低版本2.x
先記錄低版本的加密方式-----PBEWithMD5AndDES
1)引入jar包
dependency
groupIdcom.github.ulisesbocchio/groupId
artifactIdjasypt-spring-boot-starter/artifactId
version2.1.0/version
/dependency
如上一個(gè)啟動(dòng)類,在聯(lián)網(wǎng)的情況下就能自動(dòng)下載其余加密需要的jar包。
如果是在內(nèi)網(wǎng)的情況下,可以手動(dòng)在項(xiàng)目的lib目錄引入所需jar包,如下:
dependency
groupIdorg.jasypt/groupId
artifactIdjasypt/artifactId
version1.9.2/version
/dependency
dependency
groupIdcom.github.ulisesbocchio/groupId
artifactIdjasypt-spring-boot/artifactId
version2.1.0/version
/dependency
2)生成密碼
@Test
publicvoidtestEncrypt(){
StandardPBEStringEncryptorstandardPBEStringEncryptor=newStandardPBEStringEncryptor();
EnvironmentPBEConfigconfig=newEnvironmentPBEConfig();
config.setAlgorithm("PBEWithMD5AndDES");//加密的算法,這個(gè)算法是默認(rèn)的
config.setPassword("Angel");//加密的密鑰,隨便自己填寫,很重要千萬不要告訴別人
standardPBEStringEncryptor.setConfig(config);
StringplainText="123456";//自己的密碼
StringencryptedText=standardPBEStringEncryptor.encrypt(plainText);
System.out.println(encryptedText);
}
如圖,數(shù)據(jù)庫密碼為123456,密鑰為Angel,加密算法也如上;
運(yùn)行如圖:4o+eS8OaWQ7HcjVgrkoX0A==
3)測(cè)下解密
@Test
publicvoidtestDe(){
StandardPBEStringEncryptorstandardPBEStringEncryptor=newStandardPBEStringEncryptor();
EnvironmentPBEConfigconfig=newEnvironmentPBEConfig();
config.setAlgorithm("PBEWithMD5AndDES");
config.setPassword("Angel");
standardPBEStringEncryptor.setConfig(config);
StringencryptedText="4o+eS8OaWQ7HcjVgrkoX0A==";//加密后的密碼
StringplainText=standardPBEStringEncryptor.decrypt(encryptedText);
System.out.println(plainText);
}
運(yùn)行如圖:
4)yml配置
記好加密好的密碼,在yml文件里將數(shù)據(jù)源那里用ENC套上,如下:
spring:
datasource:
username:root
password:ENC(4o+eS8OaWQ7HcjVgrkoX0A==)
url:jdbc:mysql://localhost:3306/testuseUnicode=trueuseJDBCCompliantTimezoneShift=trueuseLegacyDatetimeCode=falseserverTimezone=UTC
driver-class-name:com.mysql.cj.jdbc.Driver
jasypt:
encryptor:
password:Angel
algorithm:PBEWithMD5AndDES
5)測(cè)測(cè)登錄
題外話,啟動(dòng)類上無需開啟加密注解(@EnableEncryptableProperties)
2.高版本3.x
1)引入jar包
dependency
groupIdcom.github.ulisesbocchio/groupId
artifactIdjasypt-spring-boot-starter/artifactId
version3.0.3/version
/dependency
與前面一致,沒有外網(wǎng)的條件,引入如下jar包
!--/artifact/org.jasypt/jasypt--
dependency
groupIdorg.jasypt/groupId
artifactIdjasypt/artifactId
version1.9.3/version
/dependency
!--/artifact/com.github.ulisesbocchio/jasypt-spring-boot--
dependency
groupIdcom.github.ulisesbocchio/groupId
artifactIdjasypt-spring-boot/artifactId
version3.0.3/version
/dependency
2)生成密碼
這里用的是一個(gè)工具類,CV大法。
packagecom.example.demo.utils;
*@author楊帥帥
*@time2025/12/5-1:00
importorg.jasypt.encryption.pbe.PooledPBEStringEncryptor;
importorg.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
publicclassJasypUtil{
privatestaticfinalStringPBEWITHHMACSHA512ANDAES_256="PBEWITHHMACSHA512ANDAES_256";
*@Description:Jasyp加密(PBEWITHHMACSHA512ANDAES_256)
*@Author:Rambo
*@CreateDate:2025/7/2514:34
*@UpdateUser:Rambo
*@UpdateDate:2025/7/2514:34
*@paramplainText待加密的原文
*@paramfactor加密秘鑰
*@returnjava.lang.String
*@Version:1.0.0
publicstaticStringencryptWithSHA512(StringplainText,Stringfactor){
//1.創(chuàng)建加解密工具實(shí)例
PooledPBEStringEncryptorencryptor=newPooledPBEStringEncryptor();
//2.加解密配置
SimpleStringPBEConfigconfig=newSimpleStringPBEConfig();
config.setPassword(factor);
config.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);
//為減少配置文件的書寫,以下都是Jasyp3.x版本,配置文件默認(rèn)配置
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
//3.加密
returnencryptor.encrypt(plainText);
*@Description:Jaspy解密(PBEWITHHMACSHA512ANDAES_256)
*@Author:Rambo
*@CreateDate:2025/7/2514:40
*@UpdateUser:Rambo
*@UpdateDate:2025/7/2514:40
*@paramencryptedText待解密密文
*@paramfactor解密秘鑰
*@returnjava.lang.String
*@Version:1.0.0
publicstaticStringdecryptWithSHA512(StringencryptedText,Stringfactor){
//1.創(chuàng)建加解密工具實(shí)例
PooledPBEStringEncryptorencryptor=newPooledPBEStringEncryptor();
//2.加解密配置
SimpleStringPBEConfigconfig=newSimpleStringPBEConfig();
config.setPassword(factor);
config.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);
//為減少配置文件的書寫,以下都是Jasyp3.x版本,配置文件默認(rèn)配置
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
//3.解密
returnencryptor.decrypt(encryptedText);
publicstaticvoidmain(String[]args){
Stringfactor="Angel";
StringplainText="123456";
StringencryptWithSHA512Str=encryptWithSHA512(plainText,factor);
StringdecryptWithSHA512Str=decryptWithSHA512(encryptWithSHA512Str,factor);
System.out.println("采用AES256加密前原文密文:"+encryptWithSHA512Str);
System.out.println("采用AES256解密后密文原文:"+decryptWithSHA512Str);
}
執(zhí)行這個(gè)main方法,來,見證奇跡的時(shí)刻
Exceptioninthreadmainorg.jasypt.exceptions.EncryptionOperationNotPossibleException:Encryptionraisedanexception.ApossiblecauseisyouareusingstrongencryptionalgorithmsandyouhavenotinstalledtheJavaCryptographyExtension(JCE)UnlimitedStrengthJurisdictionPolicyFilesinthisJavaVirtualMachine
atorg.jasypt.encryption.pbe.StandardPBEByteEncryptor.handleInvalidKeyException(StandardPBEByteEncryptor.java:1207)
atorg.jasypt.encryption.pbe.StandardPBEByteEncryptor.encrypt(StandardPBEByteEncryptor.java:996)
atorg.jasypt.encryption.pbe.StandardPBEStringEncryptor.encrypt(StandardPBEStringEncryptor.java:655)
atorg.jasypt.encryption.pbe.PooledPBEStringEncryptor.encrypt(PooledPBEStringEncryptor.java:465)
atcom.example.demo.utils.JasypUtil.encryptWithSHA512(JasypUtil.java:41)
atcom.example.demo.utils.JasypUtil.main(JasypUtil.java:78)
這個(gè)錯(cuò),很有意思,在加密的時(shí)候,手動(dòng)配置了JCE的方法來支持加密的程序,然而jasypt3.x版本的對(duì)于jdk8自帶的jce的包不兼容,需要升級(jí)一下,所以到網(wǎng)上下載jdk8對(duì)應(yīng)的JCE包jce_policy-8。
下載后解壓有兩個(gè)jar包,如圖:
到該目錄下替換即可:C:\ProgramFiles\Java\jdk1.8.0_25\jre\lib\security
然后運(yùn)行main方法
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 46940-2025中醫(yī)藥中醫(yī)臨床術(shù)語系統(tǒng)分類框架
- 海外領(lǐng)事保護(hù)培訓(xùn)課件
- 電子數(shù)據(jù)取證分析師崗前操作規(guī)范考核試卷含答案
- 布藝工操作能力競(jìng)賽考核試卷含答案
- 船舶機(jī)工崗前個(gè)人技能考核試卷含答案
- 潤(rùn)滑油調(diào)合操作工崗前情緒管理考核試卷含答案
- 漁網(wǎng)具工測(cè)試驗(yàn)證測(cè)試考核試卷含答案
- 動(dòng)物膠提膠濃縮工創(chuàng)新思維強(qiáng)化考核試卷含答案
- 酒店員工職業(yè)發(fā)展與晉升通道制度
- 浪費(fèi)培訓(xùn)教學(xué)課件
- 《水庫泥沙淤積及影響評(píng)估技術(shù)規(guī)范》
- 2023-2024學(xué)年浙江省杭州市西湖區(qū)教科版五年級(jí)上冊(cè)期末考試科學(xué)試卷
- GB/T 7948-2024滑動(dòng)軸承塑料軸套極限PV試驗(yàn)方法
- DL∕T 1057-2023 自動(dòng)跟蹤補(bǔ)償消弧線圈成套裝置技術(shù)條件
- AQ 2003-2018 軋鋼安全規(guī)程(正式版)
- 兒童特發(fā)性矮身材診斷與治療中國專家共識(shí)(2023版)解讀
- 村委會(huì)指定監(jiān)護(hù)人證明書模板
- 送給業(yè)主禮物方案
- JJG 393-2018便攜式X、γ輻射周圍劑量當(dāng)量(率)儀和監(jiān)測(cè)儀
- 辦理退休委托書
- 數(shù)據(jù)分析部年終述職報(bào)告總結(jié)
評(píng)論
0/150
提交評(píng)論