如何給yml配置文件的密碼加密(SpringBoot)_第1頁
如何給yml配置文件的密碼加密(SpringBoot)_第2頁
如何給yml配置文件的密碼加密(SpringBoot)_第3頁
如何給yml配置文件的密碼加密(SpringBoot)_第4頁
如何給yml配置文件的密碼加密(SpringBoot)_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論