Springboot 配置文件中用户名密码加密

原配置文件内容

Springboot 配置文件中用户名密码加密_第1张图片

详细操作步骤

1、在pom.xml文件中加依赖


	
		com.github.ulisesbocchio
		jasypt-spring-boot
		2.0.0
	

2、重新加载pom文件(因为可能会出现新加的依赖maven不生效)

3、找到maven仓库中的上面的依赖的位置

eg:我的位置是这里,请注意自己的位置(肯定是在org路径下)Springboot 配置文件中用户名密码加密_第2张图片

4、打开PowerShell窗口(在jar包目录中按住shift+鼠标右键)

在这里插入图片描述

5、输入命令,执行jar包加密

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=“Zhiradar@135” password=Zhiradar@135 algorithm=PBEWithMD5AndDES
注:input=" ",分号中的内容为原配置文件中的需要加密的数据,该数据必须在双引号内
eg: input=“Zhiradar@135”
password= ,没有引号,并且=号后面的值是你自己起的,叫啥都行(尽量复杂一点,都是为了安全性)
eg1: password=sdkjfhkhs
eg2: password=woshinibaba@163
图示:
Springboot 配置文件中用户名密码加密_第3张图片
绿色框里的为原配置文件用户名和密码
蓝色框里的为盐值(盐值就是你自己起的那个加密数据)
黄色框里的是执行上述命令后生成的新配置文件中的用户名和密码

新配置文件内容

Springboot 配置文件中用户名密码加密_第4张图片
jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD}
这个是服务启动时候需要给配置文件增加的环境变量参数(就是上面自己起的)
JASYPT_ENCRYPTOR_PASSWORD也是自己起的名字
要对应启动jar包或者启动项目是配置的环境变量用的

jasypt.encryptor.algorithm=PBEWithMD5AndDES
这个是加密方式,其实默认的就是这种

6、在启动类上面加上注解

Springboot 配置文件中用户名密码加密_第5张图片
@EnableEncryptableProperties
表示启动项目就开启加密配置

6、启动项目验证配置正确不正确

1)打成jar包

执行jar包形式
java -DJASYPT_ENCRYPTOR_PASSWORD=Zhiradar@135 -jar .\xxl-job-admin-2.0.2-SNAPSHOT.jar

JASYPT_ENCRYPTOR_PASSWORD=Zhiradar@135
JASYPT_ENCRYPTOR_PASSWORD自己在配置文件中配置的
Zhiradar@135 盐值也是自己起的

2) 在IDEA中启动

run–>Edit Configuarations
Springboot 配置文件中用户名密码加密_第6张图片

以上为xxl-job框架中的admin模块用户名和密码加密(涉及到启动项目后会在可视化平台输入用户名和密码)

Springboot 配置文件中用户名密码加密_第7张图片

新发现更简单的方法:

  
            com.github.ulisesbocchio
            jasypt-spring-boot-starter
            3.0.3
        

加这个依赖后按照上面的步骤去加密
yml中:
password: ENC(fzKbYZhG61e1y4V8goBXuyWFojum+RYQ6lBh5SL9=)
以下的是配置
jasypt:
encryptor:
password: gsqty #加密的密钥(盐),自定义即可
algorithm: PBEWithMD5AndDES #指定解密算法
这是直接把加密的密匙写在配置文件中,直接启动项目(不需要配置环境变量,不需要在启动类加注解)即可

工具类生成加密数据,启动项目在控制台看

package com.gw.scm.provider.quality.commons.utils;

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.PBEConfig;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
public class JasyptUtils {
    /**
     * {@link StringEncryptor} 加解密。
     * 同一个密钥(secretKey)对同一个内容执行加密,生成的密文都是不一样的,但是根据根据这些密文解密成明文都是可以.
     * 1、Jasypt 默认使用 {@link StringEncryptor} 来解密全局配置文件中的属性,所以提供密文时,也需要提供 {@linkStringEncryptor} 加密的密文
     * 2、{@link StringEncryptor} 接口有很多的实现类,比如常用的 {@link PooledPBEStringEncryptor}
     * 3、setConfig(final PBEConfig config):为对象设置 {@link PBEConfig} 配置对象
     * 4、encrypt(final String message):加密内容
     * 5、decrypt(final String encryptedMessage):解密内容
     * @param secretKey :密钥。加/解密必须使用同一个密钥
     * @param message   :加/解密的内容
     * @param isEncrypt :true 表示加密、false 表示解密
     * @return
     */
       public static String stringEncryptor(String secretKey, String message, boolean isEncrypt) {
        PooledPBEStringEncryptor pooledPBEStringEncryptor = new PooledPBEStringEncryptor();
        pooledPBEStringEncryptor.setConfig(getSimpleStringPBEConfig(secretKey));
         String result = isEncrypt ? pooledPBEStringEncryptor.encrypt(message) : pooledPBEStringEncryptor.decrypt(message);
        return result;
    }
     /**
     * 设置 {@link PBEConfig} 配置对象,SimpleStringPBEConfig 是它的实现类
     * 1、所有的配置项建议与全局配置文件中的配置项保持一致,特别是 password、algorithm 等等选项,如果不一致,则应用启动时解密失败而报错.
     * 2、setPassword(final String password):设置加密密钥,必须与全局配置文件中配置的保存一致,否则应用启动时会解密失败而报错.
     * 3、setPoolSize(final String poolSize):设置要创建的加密程序池的大小.
     * 4、setAlgorithm(final String algorithm): 设置加密算法的值, 此算法必须由 JCE 提供程序支持
     * 5、setKeyObtentionIterations: 设置应用于获取加密密钥的哈希迭代次数。
     * 6、setProviderName(final String providerName):设置要请求加密算法的安全提供程序的名称
     * 7、setSaltGeneratorClassName:设置 Sal 发生器
     * 8、setIvGeneratorClassName:设置 IV 发生器
     * 9、setStringOutputType:设置字符串输出的编码形式。可用的编码类型有 base64、hexadecimal
     * @param secretKey
     * @return
     */
      private static SimpleStringPBEConfig getSimpleStringPBEConfig(String secretKey) {
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(secretKey);
        config.setPoolSize("1");
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
         config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        return config;
    }

 public static void main(String[] args) throws Exception {
        String message = "quality123";
        String password = "gsqty";
         //一个同样的密码和秘钥,每次执行加密,密文都是不一样的。但是解密是没问题的。
        String jasyptEncrypt = stringEncryptor(password, message, true);
        System.out.println(jasyptEncrypt);
        String jasyptEncrypt1 = stringEncryptor(password, jasyptEncrypt, false);
        System.out.println(jasyptEncrypt1);
    }
}

你可能感兴趣的:(springboot,java)