jasypt配置文件加密|快速入门|实战

Jasypt (Java Simplified Encryption) 是一个 java 库,它允许开发人员以最小的成本将基本的加密功能添加到项目中,而无需深入了解密码学的工作原理。

引入依赖

 <dependency>
     <groupId>com.Github.ulisesbocchio</groupId>
     <artifactId>jasypt-Spring-boot-starter</artifactId>
     <version>3.0.4</version>
 </dependency>

生效

如果是为spring boot项目的配置文件加密,则无需额外配置,启动类上的@SpringBootApplication自动会将其注入程序,使其生效。

作用域

指定配置文件的作用域,其他配置文件不受jasypt影响

@Configuration
@EncryptablePropertySources({
 @EncryptablePropertySource("classpath:sentinel-1.properties"),                          
 @EncryptablePropertySource("classpath:sentinel-2.properties")
 })

应用

工具类


import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

/**
 * @author issavior
 */

public class JasyptUtil {
    /**
     * org.jasypt.encryption.StringEncryptor对象
     */

    private static StringEncryptor stringEncryptor = null;

    public static StringEncryptor getInstance(String secretKey) throws Exception {
        if (secretKey == null || secretKey.trim().equals("")) {
            System.out.println("秘钥不能为空!");
            throw new Exception("org.jasypt.encryption.StringEncryptor秘钥不能为空!");
        }
        if (stringEncryptor == null) {
            PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
            SimpleStringPBEConfig config = new SimpleStringPBEConfig();
            // 这个秘钥必须是我们自己定义
            config.setPassword(secretKey);
            config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
            config.setKeyObtentionIterations("1000");
            config.setPoolSize("1");
            config.setProviderName("SunJCE");
            config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
            config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
            config.setStringOutputType("base64");
            encryptor.setConfig(config);

            stringEncryptor = encryptor;
        }
        return stringEncryptor;
    }

    public static void main(final String[] args) {

        // 秘钥字符串
        String secretKey = "123!@#";

        // 待加密的明文密码
        String pass = "123456";
        try {
            StringEncryptor stringEncryptor = JasyptUtil.getInstance(secretKey);
            String encryptPass = stringEncryptor.encrypt(pass);
            System.out.println("【" + pass + "】被加密成【" + encryptPass + "】");

            String clearPass = stringEncryptor.decrypt(encryptPass);
            System.out.println("【" + encryptPass + "】被解密成【" + clearPass + "】");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

配置

jasypt:
  encryptor:
    password: 123!@#
my:
  # 必须用ENC()包起来,这样jasypt才能识别出来这个密码需要解密再传给应用程序
  msg: ENC(PwyGulNOC9YERAC9A6zpH8Da1tn50dtgJ1XBqygkdNoBTkjmENd+F5yJJMp4sthf)

属性一览

jasypt配置文件加密|快速入门|实战

进阶

其内部属性都是可以重写的,包括ENC()等。

当然了,你的盐和密码一定要分开存储,也就是说,加密后的密码配置在配置文件中,加密的盐可以放在启动参数上。


原文始发于微信公众号(步尔斯特):jasypt配置文件加密|快速入门|实战

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/35792.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!