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

如何加密配置文件里的敏感數(shù)據(jù)

 更新時(shí)間:2022年06月17日 09:28:42   作者:碼農(nóng)Amg  
這篇文章主要介紹了加密配置文件里的敏感數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

加密配置文件里面的敏感數(shù)據(jù)

項(xiàng)目開(kāi)發(fā)的時(shí)候,需要把數(shù)據(jù)存放到指定的數(shù)據(jù)庫(kù)中(例如MySql、Oracle等),還有會(huì)使用緩存數(shù)據(jù)庫(kù)提升性能的。

連接數(shù)據(jù)庫(kù)相關(guān)的信息一般都是存放在配置文件里面,spring boot會(huì)幫我們注入到具體的對(duì)象里面。但是如果配置文件里面相關(guān)的敏感信息是以【明文】的方式存儲(chǔ),那么就會(huì)存在安全隱患

今天偶然想起是不是可以把敏感信息加密起來(lái),然后寫(xiě)到配置文件里面,結(jié)果一搜,還真的有,特此記錄一下!

通用步驟(引入相關(guān)依賴)

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

數(shù)據(jù)庫(kù)信息

redis緩存信息

修改配置文件,加入密鑰

修改前的yml配置文件

server:
  port: 9091
jasypt:
  encryptor:
    # 指定加密密碼
    password: wxzkjtvvgt@44lvvz
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/encryp?serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: root1234
    username: root
  application:
    name: test-encrypt
  redis:
    port: 6379
    host: 127.0.0.1
    password: iamamg

第一種做法

@Test
    void testEncrypt() {
        final String redisHostEncrypt = stringEncryptor.encrypt("127.0.0.1");
        final String redisPasswordEncrypt = stringEncryptor.encrypt("iamamg");
        final String mysqlUrl = stringEncryptor.encrypt("jdbc:mysql://127.0.0.1:3306/encryp?serverTimezone=UTC");
        final String mysqlUserName = stringEncryptor.encrypt("root");
        final String mysqlPassword = stringEncryptor.encrypt("root1234");
        System.out.println("==================================");
        // 用這些加密的信息替換掉配置文件里面相關(guān)的配置項(xiàng)
        
        System.out.println("redis主機(jī)加密:" + redisHostEncrypt);
        System.out.println("redis密碼加密:" + redisPasswordEncrypt);
        System.out.println("mysql用戶名加密:" + mysqlUserName);
        System.out.println("mysql密碼加密:" + mysqlPassword);
        System.out.println("mysqlUrl加密:" + mysqlUrl);
        System.out.println("===================================");
        System.out.println("redis主機(jī)解密:" + stringEncryptor.decrypt(redisHostEncrypt));
        System.out.println("redis密碼解密:" + stringEncryptor.decrypt(redisPasswordEncrypt));
        System.out.println("mysql用戶名解密:" + stringEncryptor.decrypt(mysqlUserName));
        System.out.println("mysql密碼解密:" + stringEncryptor.decrypt(mysqlPassword));
        System.out.println("mysqlUrl解密:" + stringEncryptor.decrypt(mysqlUrl));
    }
==================================
redis主機(jī)加密:V5FeblAg4MRY+TEkmBlSZzgK74CTIyPPnrkcpUibYFMxbEHtmPWduLxdHpgFn3Gw
redis密碼加密:0aP2oNj2IrXA9bl6HygZQESEy82dWccigQ5Fic474y8f3pyDNxRIdA+C5SjHsKEY
mysql用戶名加密:cTPlLHJqZcchsnd0N9gZWGpFcfAFS0EwFwT0foYPXqxA9ngXfNtCUoR7rLvPfYRF
mysql密碼加密:/J2IBQyk8aydeBKL6E553ffxanVE660uuNOzUrNlVMEcrejy70Sen0MKkXc7szQ0
mysqlUrl加密:NvHXbj9LhVamadZSyXfB/Alsg+XuICiJUKTC/dl92lDEF0gcHoIi1Fd0HOxGOEBydgnyNdyK0cnDC0vyC0k+e5AR9Cr8VYDUMdALMr+85Ar4XrPZ0ZICYAsox84fSMdb
===================================
redis主機(jī)解密:127.0.0.1
redis密碼解密:iamamg
mysql用戶名解密:root
mysql密碼解密:root1234
mysqlUrl解密:jdbc:mysql://127.0.0.1:3306/encryp?serverTimezone=UTC

修改后的yml配置文件

可能你也觀察到了,需要額外注意的一點(diǎn)就是,需要加密的數(shù)據(jù)項(xiàng)都使用了ENC()括起來(lái)了

server:
  port: 9091
jasypt:
  encryptor:
    # 加密密碼
    password: wxzkjtvvgt@44lvvz
spring:
  datasource:
    url: ENC(NvHXbj9LhVamadZSyXfB/Alsg+XuICiJUKTC/dl92lDEF0gcHoIi1Fd0HOxGOEBydgnyNdyK0cnDC0vyC0k+e5AR9Cr8VYDUMdALMr+85Ar4XrPZ0ZICYAsox84fSMdb)
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: ENC(/J2IBQyk8aydeBKL6E553ffxanVE660uuNOzUrNlVMEcrejy70Sen0MKkXc7szQ0)
    username: ENC(cTPlLHJqZcchsnd0N9gZWGpFcfAFS0EwFwT0foYPXqxA9ngXfNtCUoR7rLvPfYRF)
  application:
    name: test-encrypt
  redis:
    port: 6379
    host: ENC(V5FeblAg4MRY+TEkmBlSZzgK74CTIyPPnrkcpUibYFMxbEHtmPWduLxdHpgFn3Gw)
    password: ENC(0aP2oNj2IrXA9bl6HygZQESEy82dWccigQ5Fic474y8f3pyDNxRIdA+C5SjHsKEY)

測(cè)試是否可行

	/**
     * 測(cè)試獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)總量
     */
    @Test
    void testSelectInMysql() {
        String sql = "SELECT COUNT(1) FROM T0001_TEST";
        final Integer num = jdbcTemplate.queryForObject(sql, Integer.class);
        System.out.println(num);
    }
    /**
     * 測(cè)試獲取redis中指定key
     */
    @Test
    void testSelectInRedis() {
        final String name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }

但是,大家且思考一下,我們當(dāng)前yml配置文件里面依然存在著密鑰,這是不是很不合理?只要解讀到這個(gè)文件,密鑰還是會(huì)被知道,所以這里提供另外一種做法

第二種做法

1.首先把yml文件里面的密鑰記錄下來(lái),然后把配置去掉(其實(shí)就是把這個(gè)配置移到運(yùn)行的時(shí)候才指定)

啟動(dòng)的時(shí)候加上-Djasypt.encryptor.password= 密鑰 ;這里的密鑰為 wxzkjtvvgt@44lvvz,如果密鑰錯(cuò)誤,項(xiàng)目是啟動(dòng)不成功的,通常報(bào)的錯(cuò)都是數(shù)據(jù)庫(kù)連接失敗,這也挺正常的,因?yàn)槿绻清e(cuò)誤的密鑰,密文信息就無(wú)法解密,得到的自然是不符合的信息,所以會(huì)報(bào)錯(cuò)

# 就把關(guān)于密鑰的部分移除,其他依舊不變
server:
  port: 9091
spring:
  datasource:
    url: ENC(NvHXbj9LhVamadZSyXfB/Alsg+XuICiJUKTC/dl92lDEF0gcHoIi1Fd0HOxGOEBydgnyNdyK0cnDC0vyC0k+e5AR9Cr8VYDUMdALMr+85Ar4XrPZ0ZICYAsox84fSMdb)
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: ENC(/J2IBQyk8aydeBKL6E553ffxanVE660uuNOzUrNlVMEcrejy70Sen0MKkXc7szQ0)
    username: ENC(cTPlLHJqZcchsnd0N9gZWGpFcfAFS0EwFwT0foYPXqxA9ngXfNtCUoR7rLvPfYRF)
  application:
    name: test-encrypt
  redis:
    port: 6379
    host: ENC(V5FeblAg4MRY+TEkmBlSZzgK74CTIyPPnrkcpUibYFMxbEHtmPWduLxdHpgFn3Gw)
    password: ENC(0aP2oNj2IrXA9bl6HygZQESEy82dWccigQ5Fic474y8f3pyDNxRIdA+C5SjHsKEY)

2.在IDEA里面啟動(dòng)程序的方式

3.打成jar包,命令行啟動(dòng)的方式

最終還是測(cè)試是否可行

此時(shí)模擬真實(shí)的三層開(kāi)發(fā)

//controller代碼
    
/**
 * @Author: Amg
 * @Date: Created in 17:45 2021/04/17
 * @Description: TODO
 */
@RestController
public class TestController {
    @Autowired
    TestServiceImpl service;
    @GetMapping("/count")
    public String getCount() {
        final Integer count = service.getCount();
        if (StringUtils.isEmpty(count)) {
            return "連接數(shù)據(jù)庫(kù)出問(wèn)題了";
        } else {
            return "連接數(shù)據(jù)庫(kù)成功!當(dāng)前數(shù)據(jù)量為:" + count;
        }
    }
}
//service代碼
/**
 * @Author: Amg
 * @Date: Created in 17:46 2021/04/17
 * @Description: TODO
 */
@Service
public class TestServiceImpl {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public Integer getCount() {
        try {
            String sql = "SELECT COUNT(1) FROM T0001_TEST";
            return jdbcTemplate.queryForObject(sql, Integer.class);
        } catch (DataAccessException e) {
            e.printStackTrace();
            return null;
        }
    }
}

莫得問(wèn)題!

總結(jié)

1、引入相關(guān)依賴

2、修改配置文件,加入密鑰配置 / 啟動(dòng)的時(shí)候指定密鑰

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

积石山| 商丘市| 伊宁县| 常山县| 宁德市| 武宁县| 肥西县| 吉首市| 漳州市| 伊金霍洛旗| 斗六市| 普定县| 邹平县| 正宁县| 株洲市| 鄂托克前旗| 磐安县| 平顺县| 荥阳市| 土默特左旗| 巫溪县| 绥滨县| 中宁县| 来凤县| 会宁县| 应城市| 贵州省| 黄石市| 青海省| 连城县| 婺源县| 台山市| 扶风县| 庆城县| 香格里拉县| 科技| 九台市| 太和县| 桐梓县| 宁南县| 德格县|