• jasypt加密配置文件


    项目组切换生产环境就将配置文件给替换了,里面的铭感信息都给加密了


    1. 什么是 jasypt

    Jasypt 是一个 Java 库,它允许开发人员以最少的努力为他/她的项目添加基本的加密功能,而无需深入了解密码学的工作原理

    • 高安全性、基于标准的加密技术,适用于单向和双向加密。加密密码、文本、数字、二进制文件
    • 适合集成到基于 Spring 的应用程序中
    • 用于加密应用程序(即数据源)配置的集成功能




    2. 使用


    2.1 添加依赖

    <!--  场景启动器不用使用 @EnableEncryptableProperties 注解来开启功能  -->
    <dependency>
        <groupId>com.github.ulisesbocchio</groupId>
        <artifactId>jasypt-spring-boot-starter</artifactId>
        <version>3.0.3</version>
    </dependency>
    

    2.2 加密

    // 自己写一个加密工具类
    // 记下密钥、密文,使用完工具类则立马删除该工具类
    public class jasyptUtil {
        // 密钥
        private static final String SECRET_KEY = "YOUR_SECRET_KEY";
    
        // 加密
        private static void encrypt() {
            StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
            encryptor.setPassword(SECRET_KEY);
            System.out.println("username: " + encryptor.encrypt("root"));
            System.out.println("password: " + encryptor.encrypt("123456"));
           
        }
    
        // 解密
        private static void decrypt() {
            StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
            encryptor.setPassword(SECRET_KEY);
            System.out.println("username: " + encryptor.decrypt("E+izLflKlT+IvffuKpbJlg=="));
            System.out.println("password: " + encryptor.decrypt("YelRk+rlONRKAvgaoHKy+Q=="));
        }
    
        // 每次加密输出都不一样,因有随机数的参与,但是能解密出相同的数据
        public static void main(String[] args) {
            // E+izLflKlT+IvffuKpbJlg==
            // YelRk+rlONRKAvgaoHKy+Q==
            encrypt();
            
            // root
            // 123456
            decrypt();
        }
    }
    

    2.3 使用

    # 将配置文件中的明文敏感数据用 ENC(密文) 替换
    spring:
      application:
        name: jasypt-test
      datasource:
        username: ENC(E+izLflKlT+IvffuKpbJlg==)
        password: ENC(YelRk+rlONRKAvgaoHKy+Q==)
    

    2.4 项目启动

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




    3. 原理

    知道原理才懂得 jasypt 是怎么加密才不泄露的


    3.1 PBE加密

    我们使用 PBE 进行加密,其加密过程为:明文 + 密钥 + 随机盐值 => 密文,所以密文和密钥不能存放在一处

    随机盐值在 jasypt 运行中可获取的,那么我们只要取得密钥就可以解密数据

    所以密钥的存放十分重要,在上面项目启动过程中,只要启动项目的运维人员不泄露密钥,那么数据就是安全的


    3.2 密钥处理

    上面将密钥作为启动参数传入,还有一种密钥处理方式就是放入系统变量


    3.2.1 添加系统变量

    vim /etc/profile
    export jasypt.encryptor.password=YOUR_SECRET_KEY
    

    3.2.2 获取系统变量

    @SpringBootApplication
    public class JasyptApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(JasyptApplication.class, args);
            
            // 从系统变量中获取密钥,再放入环境变量
            System.setProperty("jasypt.encryptor.password", System.getenv("jasypt.encryptor.password"));
        }
    }
    


  • 相关阅读:
    C# 用装饰模式
    31天重构学习笔记4. 降低方法
    JData 使用教程 对输入数据进行验证(服务端验证)
    sql over的作用及用法
    31天重构学习笔记3. 提升方法
    《博客园精华集》
    const和static readonly 区别
    JData 使用教程(四) 对输入数据进行验证(客户端验证)
    用JQuery制作简单实用的下拉菜单
    图片压缩后,依然很大的解决方案
  • 原文地址:https://www.cnblogs.com/Howlet/p/15397910.html
Copyright © 2020-2023  润新知