最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot3使用Jasypt加密數(shù)據(jù)庫(kù)用戶名、密碼等敏感信息

 更新時(shí)間:2024年07月05日 10:34:07   作者:頑石九變  
使用Jasypt(Java Simplified Encryption)進(jìn)行數(shù)據(jù)加密和解密主要涉及幾個(gè)步驟,包括引入依賴、配置加密密碼、加密敏感信息、將加密信息存儲(chǔ)到配置文件中,以下是詳細(xì)的使用說(shuō)明,需要的朋友可以參考下

一、使用步驟介紹

使用Jasypt(Java Simplified Encryption)進(jìn)行數(shù)據(jù)加密和解密主要涉及幾個(gè)步驟,包括引入依賴、配置加密密碼、加密敏感信息、將加密信息存儲(chǔ)到配置文件中,以及應(yīng)用程序啟動(dòng)時(shí)自動(dòng)解密。以下是詳細(xì)的使用說(shuō)明:

1. 引入依賴

首先,你需要在你的項(xiàng)目中引入Jasypt的依賴。如果你是使用Maven構(gòu)建項(xiàng)目,可以在pom.xml文件中添加如下依賴(注意版本號(hào)可能隨時(shí)間更新,請(qǐng)參考最新版本):

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

可根據(jù)需要替換成最新的版本號(hào)。

2. 配置加密密碼

Jasypt需要一個(gè)密碼來(lái)進(jìn)行加密和解密操作。你可以通過(guò)以下幾種方式配置這個(gè)密碼:

在配置文件中指定:在你的application.propertiesapplication.yml配置文件中,添加jasypt.encryptor.password配置項(xiàng),并設(shè)置你的密碼。例如:

# application.properties
jasypt.encryptor.password=your_encryption_password

或者,在application.yml中:

jasypt:
  encryptor:
    password: your_encryption_password
  • 然而,將密碼直接寫在配置文件中可能存在安全風(fēng)險(xiǎn)。因此,更推薦的做法是通過(guò)啟動(dòng)參數(shù)或環(huán)境變量來(lái)傳遞這個(gè)密碼。

  • 通過(guò)啟動(dòng)參數(shù)指定:在啟動(dòng)應(yīng)用程序時(shí),可以通過(guò)-Djasypt.encryptor.password=your_encryption_password參數(shù)來(lái)指定加密密碼。

  • 使用環(huán)境變量:在某些情況下,使用環(huán)境變量來(lái)存儲(chǔ)敏感信息(如加密密碼)可能更為安全。具體方法取決于你的應(yīng)用程序部署環(huán)境。

3. 加密敏感信息

在配置加密密碼后,你可以使用Jasypt提供的工具或API來(lái)加密你的敏感信息。加密后的信息將以密文形式存儲(chǔ)。

  • 使用Jasypt CLI工具:Jasypt提供了一個(gè)命令行界面(CLI)工具,允許你在命令行中加密和解密字符串。你需要下載Jasypt的jar包,并在命令行中運(yùn)行相應(yīng)的命令。

  • 使用Jasypt API:在你的Java應(yīng)用程序中,你可以通過(guò)注入StringEncryptor接口的實(shí)現(xiàn)類來(lái)編程方式加密和解密字符串。這通常在你的Spring Boot應(yīng)用程序中通過(guò)自動(dòng)裝配完成。

4. 將加密信息存儲(chǔ)到配置文件中

加密敏感信息后,你需要將這些加密后的信息存儲(chǔ)到配置文件中。在Jasypt中,加密后的信息通常以ENC(...)的形式出現(xiàn),括號(hào)內(nèi)是加密后的密文。例如:

# application.properties
datasource.password=ENC(加密后的密碼)

5. 應(yīng)用程序啟動(dòng)時(shí)自動(dòng)解密

當(dāng)你的Spring Boot應(yīng)用程序啟動(dòng)時(shí),Jasypt會(huì)自動(dòng)檢測(cè)配置文件中的ENC(...)字符串,并使用你配置的加密密碼來(lái)解密這些字符串。解密后的明文將用于應(yīng)用程序的配置中。

注意事項(xiàng)

  • 安全性:確保你的加密密碼足夠復(fù)雜且安全存儲(chǔ),避免將密碼直接寫在配置文件中。
  • 版本兼容性:注意你使用的Jasypt版本與其他庫(kù)或框架的兼容性。
  • 算法選擇:Jasypt支持多種加密算法,你可以根據(jù)需要在配置文件中指定加密算法。

通過(guò)以上步驟,你可以在你的Spring Boot應(yīng)用程序中使用Jasypt來(lái)加密和解密配置文件中的敏感信息。

二、使用示例代碼

1、通過(guò)工具類生成密文

在application.properties 中增加配置,或者通過(guò)-Djasypt.encryptor.password=123456參數(shù)來(lái)指定加密密碼

# 用于加密的密碼
jasypt.encryptor.password=123456

使用 stringEncryptor.encrypt() 生成密文

public class JasyptSecretTest {
    @Autowired
    private StringEncryptor stringEncryptor;
    @Value("${datasource.password}")
    private String password;
    @Test
    public void encrypt(){
        // 加密
        String encrypt = stringEncryptor.encrypt("root");
        System.out.println("encrypt = " + encrypt);
    }
}

2、在application.properties 中增加配置密文

# 加密后的密文,包裹在ENC() 中
datasource.password=ENC(grdksstYZMsPmwvA0ALHXpzBQN2YTyA3t4ow1PDfJzbl+UV0LdO8UlajWKeqUF7y)
# 用于加密的密碼
jasypt.encryptor.password=123456

3、使用 @Value() 獲取明文,也可以通過(guò)stringEncryptor.decrypt(encrypt)手動(dòng)解密

@SpringBootTest
public class JasyptSecretTest {
    @Autowired
    private StringEncryptor stringEncryptor;
    @Value("${datasource.password}")
    private String password;
    @Test
    public void encrypt(){
        // 加密
        String encrypt = stringEncryptor.encrypt("root");
        System.out.println("encrypt = " + encrypt);
        // 解密,輸入獲取的加密字符串進(jìn)行解密
        String decrypt = stringEncryptor.decrypt(encrypt);
        System.out.println("decrypt = " + decrypt);
    }
    @Test
    public void show(){
        System.out.println("password = " + password);
    }
}

原理說(shuō)明

SpringBoot項(xiàng)目在啟動(dòng)過(guò)程中,會(huì)自動(dòng)注入beanStringEncryptor,用于根據(jù)不同的加密算法初始化不同的加解密實(shí)現(xiàn)類,通過(guò)StringEncryptorBuilder.build()初始化不同的加密算法

BeanNamePlaceholderRegistryPostProcessor

@Bean(name = ENCRYPTOR_BEAN_NAME)
public StringEncryptor stringEncryptor(
        final EnvCopy envCopy,
        final BeanFactory bf) {
    final String customEncryptorBeanName = envCopy.get().resolveRequiredPlaceholders(ENCRYPTOR_BEAN_PLACEHOLDER);
    final boolean isCustom = envCopy.get().containsProperty(ENCRYPTOR_BEAN_PROPERTY);
    return new DefaultLazyEncryptor(envCopy.get(), customEncryptorBeanName, isCustom, bf);
}

通過(guò)EncryptableMapPropertySourceWrapper重寫了getProperty()方法,在獲取配置值的時(shí)候,再做解密返回明文

DefaultPropertyResolver

@Override
public String resolvePropertyValue(String value) {
    return Optional.ofNullable(value)
            .map(environment::resolvePlaceholders)
            .filter(detector::isEncrypted)
            .map(resolvedValue -> {
                try {
                    // 獲取密文
                    String unwrappedProperty = detector.unwrapEncryptedValue(resolvedValue.trim());
                    String resolvedProperty = environment.resolvePlaceholders(unwrappedProperty);
                    // 執(zhí)行解密操作
                    return encryptor.decrypt(resolvedProperty);
                } catch (EncryptionOperationNotPossibleException e) {
                    throw new DecryptionException("Unable to decrypt property: " + value + " resolved to: " + resolvedValue + ". Decryption of Properties failed,  make sure encryption/decryption " +
                            "passwords match", e);
                }
            })
            .orElse(value);
}

三、Jasypt配置項(xiàng)

Jasypt支持多種配置參數(shù)以進(jìn)行密碼、Digest認(rèn)證、文本和對(duì)象的加密。以下是Jasypt支持的一些常見(jiàn)配置參數(shù):

配置參數(shù)描述示例
jasypt.encryptor.password加密器的密碼,用于解密屬性jasypt.encryptor.password=mySecretPassword
jasypt.encryptor.algorithm加密算法的名稱jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.keyObtentionIterations獲取密鑰時(shí)使用的迭代次數(shù)jasypt.encryptor.keyObtentionIterations=1000
jasypt.encryptor.poolSize加密池的大?。ㄈ绻褂昧顺鼗用芷鳎?/td>jasypt.encryptor.poolSize=1
jasypt.encryptor.providerName加密提供者的名稱(如JCE提供者)jasypt.encryptor.providerName=SunJCE
jasypt.encryptor.saltGeneratorClassName鹽生成器的類名jasypt.encryptor.saltGeneratorClassName=org.jasypt.salt.RandomSaltGenerator
jasypt.encryptor.ivGeneratorClassName初始化向量生成器的類名jasypt.encryptor.ivGeneratorClassName=org.jasypt.iv.NoIvGenerator
jasypt.encryptor.stringOutputType加密字符串的輸出類型(如base64)jasypt.encryptor.stringOutputType=base64
jasypt.encryptor.property.prefix加密屬性前綴,用于識(shí)別加密屬性jasypt.encryptor.property.prefix=ENC(
jasypt.encryptor.property.suffix加密屬性后綴,用于識(shí)別加密屬性jasypt.encryptor.property.suffix=)
jasypt.encryptor.proxyPropertySources是否通過(guò)代理截取屬性值以進(jìn)行解密jasypt.encryptor.proxyPropertySources=true

注意:

  • 這些參數(shù)主要用于配置Jasypt加密器(StringEncryptor)的行為。
  • 在實(shí)際使用中,特別是生產(chǎn)環(huán)境中,jasypt.encryptor.password等敏感信息不應(yīng)該硬編碼在配置文件中,而是通過(guò)環(huán)境變量、命令行參數(shù)或外部配置文件等方式安全地傳遞。
  • Jasypt支持多種加密算法,如PBEWithMD5AndDES、PBEWithHMACSHA512ANDAES_256等,具體選擇哪種算法取決于安全需求和環(huán)境配置。
  • 上述表格中的示例配置參數(shù)值僅為演示用途,實(shí)際使用時(shí)需要根據(jù)項(xiàng)目需求和安全策略進(jìn)行配置。

四、支持的加密算法

Jasypt支持多種加密算法以保護(hù)敏感數(shù)據(jù)。以下是Jasypt支持的一些常見(jiàn)加密算法:

加密算法名稱描述
PBEWithMD5AndDES基于密碼的加密(PBE),使用MD5作為散列函數(shù)和DES作為加密算法。這是一種較舊的加密算法,但在某些舊系統(tǒng)中可能仍在使用
PBEWithMD5AndTripleDES與PBEWithMD5AndDES類似,但使用TripleDES作為加密算法,提供了更強(qiáng)的安全性。
PBEWithHMACSHA512ANDAES_256使用HMAC-SHA-512散列函數(shù)和AES-256加密算法的組合,提供了非常高的安全性。這是Jasypt較新版本中推薦的加密算法之一(默認(rèn)值)
AES高級(jí)加密標(biāo)準(zhǔn)(AES),是一種廣泛使用的對(duì)稱加密算法。Jasypt支持不同長(zhǎng)度的AES密鑰,如AES-128、AES-192和AES-256
RSARivest-Shamir-Adleman(RSA)算法,是一種非對(duì)稱加密算法。它使用一對(duì)密鑰:公鑰和私鑰。公鑰用于加密數(shù)據(jù),私鑰用于解密數(shù)據(jù)

以上就是SpringBoot3使用Jasypt加密數(shù)據(jù)庫(kù)用戶名、密碼等敏感信息的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot3 Jasypt加密數(shù)據(jù)庫(kù)信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

永宁县| 芒康县| 靖州| 手机| 泉州市| 民丰县| 双鸭山市| 营山县| 赣州市| 栖霞市| 荔波县| 宁晋县| 磐安县| 东海县| 宁城县| 二连浩特市| 临城县| 威信县| 称多县| 普兰县| 西吉县| 湘潭县| 旬邑县| 万宁市| 平昌县| 察哈| 宜兰县| 哈密市| 洪江市| 东方市| 绍兴县| 库伦旗| 思南县| 江阴市| 丰原市| 阳朔县| 蓬莱市| 贞丰县| 滦平县| 平武县| 崇仁县|