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

Springboot實現(xiàn)ENC加密的詳細流程

 更新時間:2023年06月05日 11:46:17   作者:364.99°  
在項目開發(fā)過程中,需要配置數(shù)據(jù)庫連接密碼、Redis密碼、網(wǎng)盤上傳的AK/SK等敏感信息,都需要保存在配置文件里,或者配置中心,這些信息如果泄露,還是會造成一定的困擾,下面這篇文章主要給大家介紹了關于Springboot實現(xiàn)ENC加密的詳細流程,需要的朋友可以參考下

1. 為什么要用ENC加密

以下是未經(jīng)過加密的數(shù)據(jù)庫配置,密碼均是采用明文密碼,很容易導致數(shù)據(jù)庫泄露。

spring:
 datasource:
  dynamic:
	postgresql:
	 url: jdbc:postgresql://127.0.0.1:5589/mypg?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
	 username: root
	 password: admin          
	 driver-class-name: org.postgresql.Driver 
...

redis:
 ip: www.xxxx.top
 port: 6379
 # 密碼
 pass: admin	
 # 最大實例
 max-total: 1024
 # 最大空閑實例
 max-idle: 100
 # 等待可用連接的最大時間,單位毫秒,默認值為-1,表示永不超時。
 max-wait: 10000
 # 超時時間,單位毫秒。
 timeout: 10000

以下是經(jīng)過ENC加密之后的配置,這樣之后,數(shù)據(jù)庫密碼安全級別就高了。

spring:
 datasource:
  dynamic:
	postgresql:
	 url: jdbc:postgresql://127.0.0.1:5589/mypg?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
	 username: root
	 password: ENC(2qWZr4WLw8H0nPBzMXBV9WimRfKC3pv5UVGB5mMApbINg2s83VfsYvL7XTWaUR8q)
	 driver-class-name: org.postgresql.Driver 
...

redis:
 ip: www.xxxx.top
 port: 6379
 # 密碼
 pass: ENC(2qWZr4WLw8H0nPBzMXBV9WimRfKC3pv5UVGB5mMApbINg2s83VfsYvL7XTWaUR8q)	
 # 最大實例
 max-total: 1024
 # 最大空閑實例
 max-idle: 100
 # 等待可用連接的最大時間,單位毫秒,默認值為-1,表示永不超時。
 max-wait: 10000
 # 超時時間,單位毫秒。
 timeout: 10000

2. jasypt實現(xiàn)ENC加密

1. 實現(xiàn)流程

導入依賴:

        <!-- 配置文件加密 -->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.2</version>
        </dependency>

測試類:

import org.jasypt.encryption.StringEncryptor;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

/**
 * @Author: chenJY
 * @Description:
 * @Date: 2022-11-18 9:19
 */
@SpringBootTest
@RunWith(SpringRunner.class)
public class EncryptorTest {
    @Resource
    private StringEncryptor jasyptStringEncryptor;

    @Test
    public void encode() {
        System.out.println( "加密密文:" + jasyptStringEncryptor.encrypt("admin") );
        System.out.println("解密密文:" + jasyptStringEncryptor.decrypt(jasyptStringEncryptor.encrypt("admin")));
    }
}

運行測試類:

注意: 每次運行測試類輸出的加密密碼都不同,但不影響其解密密文。

將加密密文加入到配置文件中:

spring:
 datasource:
  dynamic:
	postgresql:
	 url: jdbc:postgresql://127.0.0.1:5589/mypg?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
	 username: root
	 password: ENC(2qWZr4WLw8H0nPBzMXBV9WimRfKC3pv5UVGB5mMApbINg2s83VfsYvL7XTWaUR8q)
	 driver-class-name: org.postgresql.Driver 
...

redis:
 ip: www.xxxx.top
 port: 6379
 # 密碼
 pass: ENC(2qWZr4WLw8H0nPBzMXBV9WimRfKC3pv5UVGB5mMApbINg2s83VfsYvL7XTWaUR8q)
 # 最大實例
 max-total: 1024
 # 最大空閑實例
 max-idle: 100
 # 等待可用連接的最大時間,單位毫秒,默認值為-1,表示永不超時。
 max-wait: 10000
 # 超時時間,單位毫秒。
 timeout: 10000

重啟springboot項目,能正常啟動

2. 說明

由于springboot自動配置的特性,導入 jasypt-spring-boot 依賴包之后,不用進行過多配置,就能實現(xiàn)配置文件加密字段自動解密,所以特別方便。

1. 自定義加密秘鑰

1. 鹽、前綴、后綴

可以在配置文件中自定義一個加密秘鑰(鹽), 來獲取明文密碼。

# 加密秘鑰
jasypt:
  encryptor:
    password: Chen # 加密時的salt值

自定義加密前綴、后綴: 如果不想使用 ENC來作為加密前綴,那么可以通過配置文件修改:

# 加密秘鑰
jasypt:
  encryptor:
    password: Chen
    property:
      prefix: Chen( # 前綴
      suffix: )chen # 后綴

那么,密碼的格式如下:

password: Chen(2qWZr4WLw8H0nPBzMXBV9WimRfKC3pv5UVGB5mMApbINg2s83VfsYvL7XTWaUR8q)chen

2. 自定義加密方案

配置類

@Configuration
public class MyEncryptorCfg {
    /**
     * @Description 自定義的加密器配置
     * @author chenJY
     * @date 2022/11/18 9:52
     * @return StringEncryptor
    */
    @Bean(name = "myStringEncryptor")
    public StringEncryptor myStringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("Chen");
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
        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);
        return encryptor;
    }
}

注意1: bean必須重命名,bean默認名是 jasyptStringEncryptor,當我們要自定義加密方案的時候,就必須重命名。

注意2: 需要在配置文件中加入如下配置:

jasypt:
  encryptor:
    bean: myStringEncryptor

并修改測試類:

    @Autowired
    private StringEncryptor myStringEncryptor;

2. 部署方案

密鑰(鹽值)存儲說明: 本身加解密過程都是通過鹽值進行處理的,所以正常情況下鹽值和加密串是分開存儲的。鹽值應該放在系統(tǒng)屬性、命令行或是環(huán)境變量來使用,而不是放在配置文件。

程序啟動 命令行參數(shù):

java -jar xxx.jar --jasypt.encryptor.password=Chen &

程序啟動 環(huán)境變量:

java -jar -Djasypt.encryptor.password=Chen xxx.jar

3. 輸出密文的幾種方案

優(yōu)化1.: 上面的寫法是直接寫死了需要加密的密碼,我們可以換一種在配置文件中讀取數(shù)據(jù)庫密碼的寫法,如下:

	import org.jasypt.encryption.StringEncryptor;
	import org.junit.Test;
	import org.junit.runner.RunWith;
	import org.springframework.boot.test.context.SpringBootTest;
	import org.springframework.test.context.junit4.SpringRunner;
	
	import javax.annotation.Resource;
	
	/**
	 * @Author: chenJY
	 * @Description:
	 * @Date: 2022-11-18 9:19
	 */
	@SpringBootTest
	@RunWith(SpringRunner.class)
	public class EncryptorTest {
		@Resource
    	private ApplicationContext applicationContext;

	    @Resource
	    private StringEncryptor jasyptStringEncryptor;
	
	    @Test
	    public void encode() {
	        Environment environment = applicationContext.getEnvironment();
        	String password = environment.getProperty("spring.datasource.dynamic.postgresql.password");
	        System.out.println( "加密密文:" + jasyptStringEncryptor.encrypt(password) );
	        System.out.println("解密密文:" + jasyptStringEncryptor.decrypt(jasyptStringEncryptor.encrypt(password)));
	    }
	}

優(yōu)化2: 重寫啟動類的run(),實現(xiàn)每次啟動項目都會輸出一次加密密文

import org.jasypt.encryption.StringEncryptor;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;

@SpringBootApplication
public class TestDemoApplication implements CommandLineRunner{

    @Resource
    private ApplicationContext applicationContext;

    @Resource
    private StringEncryptor jasyptStringEncryptor;

    public static void main(String[] args) {
        SpringApplication.run(TestDemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        Environment environment = applicationContext.getEnvironment();
        String pwd = environment.getProperty("spring.datasource.dynamic.postgresql.password");
        // 打印解密后的結果
        System.out.println( "加密密文:" + jasyptStringEncryptor.encrypt(pwd) );
    }
}

總結

到此這篇關于Springboot實現(xiàn)ENC加密的詳細流程的文章就介紹到這了,更多相關Springboot實現(xiàn)ENC加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

锡林浩特市| 晋宁县| 鄂伦春自治旗| 门源| 永德县| 庆城县| 贵州省| 海林市| 搜索| 永平县| 大安市| 宜城市| 共和县| 昔阳县| 襄汾县| 遂川县| 咸阳市| 连云港市| 通山县| 若尔盖县| 大厂| 鹿泉市| 广西| 辽宁省| 始兴县| 邵东县| 南木林县| 营口市| 仪征市| 修武县| 淮阳县| 垦利县| 浦县| 盈江县| 柳州市| 原阳县| 临安市| 沁源县| 泸水县| 新建县| 长兴县|