<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>
jasypt:
  encryptor:
    bootstrap: true
    password:  test

如何加解密

  • 使用 org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI 加密
    • java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="contactspassword" password=supersecretz algorithm=PBEWithMD5AndDES
  • 使用org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI 解密
    -java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="i00VogiiZ1FpZR9McY7XNw==" password=supersecretz algorithm=PBEWithMD5AndD

加密后的属性

  • 加密后配置类似spring.datasource.password=ENC(BsSPrDRNeU/Nb1v/GsHvZA==)

如何隐藏关键的机密key

如果使用-D 或者–server.port 设置启动参数.在ps 时或者jps时都能看到.因此是不安全的.下面两种方法可以解决这个问题.

  • echo "jasypt.encryptor.password=xxx" | java -jar -Dspring.datasource.usename=ENC(BsSPrDRNeU/Nb1v/GsHvZA==) xxx.jar
  • java -jar -Dspring.datasource.usename=ENC(BsSPrDRNeU/Nb1v/GsHvZA==) xxx.jar <<< "jasypt.encryptor.password=xxx"
  • 解析参数的工具类
    /**
     * 从stdin 中读取配置参数
     * example:
     * echo "--jasypt.encryptor.password=xxx --server.port=8081" | java -jar xxx.jar
     * java -jar xxx.jar <<< "--jasypt.encryptor.password=xxx --server.port=8081"
     * 多个参数以空格分割.
     * @author xielongwang
     * @create 2018-07-16 下午5:34
     * @description 从stdin 中读取配置参数,为了隐蔽ps or jps 能看到启动参数
    @Slf4j
    public class StdInParam {
         * 从stdin 中读取配置参数
         * @param args 原来的启动参数
         * @return 合并后的参数
        public static String[] getParamFormStdinLine(String[] args) {
            StringBuilder paramBuild = new StringBuilder();
            try (BufferedReader in = new BufferedReader(new InputStreamReader(new BufferedInputStream(System.in)))) {
                if (in.ready()) {
                    String param;
                    while ((param = in.readLine()) != null && param.length() != 0) {
                        paramBuild.append(param);
            } catch (Exception e) {
                log.error("reade stdin param error ", e);
            //如果stdin 为空默认返回args
            if (StringUtils.isEmpty(paramBuild.toString())) {
                log.warn("stdin param is null! ");
                return args;
            //转换成启动参数
            String[] stdinParam = paramBuild.toString().split("\\s+");
            return ObjectArrays.concat(stdinParam, args, String.class);
        
    • 使用
     public static void main(String[] args) {
        String[] startParam = StdInParam.getParamFormStdinLine(args);
        SpringApplication.run(xxx.class, startParam);
      
    • 使用 spring.profiles.include 配置项,
      spring boot 会默认扫描"classpath:/,classpath:/config/,file:./,file:./config/" 这些路径下的配置文件.
    • 配置方法application.yml 加入
      spring:
        profiles:
          include:
            - security
      
      在启动jar的目录中增加一个 application-security.yml 配置上
      jasypt:
        encryptor:
          password: xxx
      
      在发版前把这个加上,发完版后清除掉即可. 但是当refresh 配置的时候是否为空就要测试好
    • 踩过的坑,使用druid 配置用户名密码加密时不要配置druid下面.要用spring.datasource.password 不然刷新就会有问题.
添加依赖&lt;dependency&gt; &lt;groupId&gt;com.github.ulisesbocchio&lt;/groupId&gt; &lt;artifactId&gt;jasypt-spring-boot-starter&lt;/artifactId&gt; &lt;version&gt;2.1.1&lt;/version&gt;&lt;/de...
Spring-boot目中properties文件中的密码明文上传到公开的远程仓库后,不安全,可以使用Ulisesbocchio对配置文件进行加密 1.添加maven依赖: <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.1</v
​ 在我们日常开发目的过程中,配置信息中需要用到很多用户名密码(例如数据库、redis、邮箱等),这些都是敏感信息,通常我们都是进行加密处理,而jasypt是一个通用的加解密库,在spring boot 目中使用方便。 下面以3.0.3版本为基础,结合自己的理解,简单说下目中如何使用 以及jasypt提供了哪几种加密算法 1.依赖引用 maven: <dependency> <groupId>com.github.ulisesbocchio</groupId&g
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>1.16</version> </dependency&g <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>