• springboot配置加密的正确姿势


    主要介绍springboot项目中配置文件的加密


    前言

    为了保证服务器相关信息的保密,一般会采用加密的方式进行对配置文件原文的加密,今天介绍下springboot自带的一个配置文件加密插件: jasypt


    一、使用步骤

    1.引入依赖

       
                com.github.ulisesbocchio
                jasypt-spring-boot-starter
                3.0.3
            
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. yml配置

    代码如下(示例):

    jasypt:
      encryptor:
        algorithm: PBEWithMD5AndDES
        # 加密密钥,使用方式 spring.datasource.password=ENC(密文),不要设置在配置文件中,建议使用环境变量或者启动参数: --jasypt.encryptor.password=123456
        password: 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5

    algorithm 加密的算法
    password 加解密的密钥,自定义即可,但是加密解密的秘钥应该是同一个

    其中 algorithm 的可选项:
    PBEKeyFactory 这个类中罗列了以下算法可供大家选择;

        static {
            validTypes.add("PBEWithMD5AndDES".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithSHA1AndDESede".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithSHA1AndRC2_40".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithSHA1AndRC2_128".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithSHA1AndRC4_40".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithSHA1AndRC4_128".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithMD5AndTripleDES".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithHmacSHA1AndAES_128".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithHmacSHA224AndAES_128".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithHmacSHA256AndAES_128".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithHmacSHA384AndAES_128".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithHmacSHA512AndAES_128".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithHmacSHA1AndAES_256".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithHmacSHA224AndAES_256".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithHmacSHA256AndAES_256".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithHmacSHA384AndAES_256".toUpperCase(Locale.ENGLISH));
            validTypes.add("PBEWithHmacSHA512AndAES_256".toUpperCase(Locale.ENGLISH));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3. 使用

    1 通过运行将原文加密
    在项目的test中运行如下方法

     /**
         * 引入jasypt-spring-boot-starter就会自动注入
         */
        @Resource
        private StringEncryptor stringEncryptor;
    
        // 加密,可以在此处加密
        @Test
        public void StringEncryptor() {
            String encrypt = stringEncryptor.encrypt("root");
            System.out.println(encrypt);
    
            String decrypt = stringEncryptor.decrypt(encrypt);
            System.out.println(decrypt);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    相当于对root进行加密,每次运行结果不一致,我运行的结果是

    4lV/By0KHaoNUyit3OCpBW3f0qcxpNo+
    
    • 1

    2 更改原yml中的配置文件明文改为密文
    例如更改mysql用户名

    spring:
        datasource:
            type: com.alibaba.druid.pool.DruidDataSource
            driverClassName: com.mysql.cj.jdbc.Driver
            druid:
                # 主库数据源
                master:
                    url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                    username: ENC(4lV/By0KHaoNUyit3OCpBW3f0qcxpNo+)
                    password:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    这种方式就是 ENC(密文) ,运行的时候,会自动去进行相应算法的解密,算法,秘钥就是之前配置的algorithm和password
    当然这个前缀后缀识别是否解密也是可以自定义的,默认的前缀是 ENC( 默认的后缀是 )
    如何更改? 自行学习下,给大家留个动手的机会~~
    3 启动项目验证

    ok啦~~


    总结

    这样就实现了对于当前项目中的配置文件的加密,上述的配置文件的加密 算法 和 秘钥都在配置文件中,当然也有更加安全的方案,就是不把秘钥放在配置文件中;这样及时给别人看到了全部的配置,也无法解密!
    需要做如下处理:
    1 还是运行相应的加密测试方法,提前将要加密的字符串加密好,并在yml中替换好,删除配置文件中的password
    2 打包文件
    3 运行jar包的时候,指定秘钥

    java -jar -Djasypt.encryptor.password=123456 ruoyi.jar
    
    • 1

    这样就算君子层面的万无一失了(防君子不防小人)

  • 相关阅读:
    NLTK(自然语言工具包)
    360收录量查询易语言代码
    mp4文件怎样提取mp3音频文件
    素问·热论原文
    Java 字符串String类常用方法整理
    代码+案例,实战解析BeautifulSoup4
    七、Mybatis-缓存
    【ICRA】ICRA2023 Paper List
    移动端页面秒开优化总结
    喜获殊荣!迅镭激光获评“2023年苏州市质量奖”!
  • 原文地址:https://blog.csdn.net/qq_32419139/article/details/127768587