Jasypt加密之行

一、概述

Jasypt 为开发人员提供一种简单的方式来为项目增加加密功能,该技术可用于加密任务与应用程序,例如加密密码、敏感信息和数据通信、创建完整检查数据的sums. 其他性能包括高安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、文本、数字和二进制文件。Jasypt也可以与Acegi Security整合也即Spring Security。Jasypt亦拥有加密应用配置的集成功能,而且提供一个开放的API从而任何一个Java Cryptography Extension都可以使用Jasypt。

Jasypt还符合RSA标准的基于密码的加密,并提供了无配置加密工具以及新的、高可配置标准的加密工具。

 

二、说明

简单的说,就是在开发部署项目时,连接数据库的账号/密码赤果果的写在application.properties文件里面,人家一看就知道了,不安全,通过Jasypt加密后人家看到的是一串加密后的字符串,提高了一些敏感信息的的安全性。

 

三、用法

首先引入依赖:



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

然后在:bootstrap.yml 或者.properties 文件中指明Jasypt加密数据的加密盐

(当然,jasypt加密方式,默认PBEWithMD5AndDES,可改PBEWithMD5AndTripleDES)

#设置jasypt加密配置
jasypt:
  encryptor:
    password: lj&92&jm

 

最后就是将你要加密的信息  在jasypt中通过你设置的加密盐加密后,配置到XXX.properties文件中:ENC(加密串)(上面指明了加密盐为:lj&92&jm)

例如:账号/密码:root/123456

cloud.cs1db.common.username=ENC(1NmCzZBAyJC9qgbE40v8ug==)
cloud.cs1db.common.password=ENC(Em39zu4mO5gW7fW4/NgsSg==)

 

四、如何加密

方法1:

在maven仓库中找到jasypt-1.9.2.jar包(我的地址是C:\Program Files\Java\maven\repository\org\jasypt\jasypt\1.9.2\jasypt-1.9.2.jar),这个包就是加密的包了

cmd 命令 cd到这个包的路径下,执行如下命令,它会返回你加密后的密码:

(因为我的加密盐为:lj&92&jm  有特殊字符"&",所以用""包起来了)

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password="lj&92&jm" algorithm=PBEWithMD5AndDES
  • input:是需要加密的明文
  • password:是加密盐
  • algorithm:是加密的方式(默认)

 

效果如下:

Jasypt加密之行_第1张图片

 

方法二:

直接写个工具类:

/**
 * Jasypt 加/解 密工具
 */
public class JasyptTool {
    public static void main(String[] args) {
        //加密工具
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        //加密配置
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");//加密方式,默认PBEWithMD5AndDES,可改PBEWithMD5AndTripleDES
        config.setPassword("lj&92&jm");//加密所需的salt(盐)
        //应用配置
        encryptor.setConfig(config);

        //加密
        encryption(encryptor, "root");
        //解密
        decrypt(encryptor, "Lx2KkAQulcP98WHYA4zslQ==");
    }

    /**
     * Jasypt加密 结果
     * @param encryptor 加密工具
     * @param plaintext 需要加密字符串
     */
    public static void encryption(StandardPBEStringEncryptor encryptor, String plaintext){
        //加密
        String ciphertext=encryptor.encrypt(plaintext);
        System.out.println(plaintext + " : " + ciphertext);
    }

    /**
     * Jasypt解密 结果
     * @param encryptor 解密工具
     * @param ciphertext 需要解密字符串
     */
    public static void decrypt(StandardPBEStringEncryptor encryptor, String ciphertext){
        //解密
        String plaintext=encryptor.decrypt(ciphertext);
        System.out.println(ciphertext + " : " + plaintext);
    }

}

效果如下:

 

 

五、进一步保障加密安全

为了防止salt(盐)泄露,反解出密码.可以在项目部署的时候使用命令传入salt(盐)值。

实际项目开发时,配置如下:

#设置jasypt加密配置
jasypt:
  encryptor:
    password: ${jasypt_encryptor_password:lj&92&jm}

开发正常启动,部署时打包成jar,启动时加入盐,按如下命令启动,但缺点是会话一关闭,程序就停止运行了

jasypt_encryptor_password="lj&92&jm" java -jar xxxx.jar

优化:需要以守护进程启动,例如写成:以后端进程的方式启动,将日志输出到nohup.log中

nohup jasypt_encryptor_password="lj&92&jm" java -jar xxxx.jar > nohup.log 2>&1 &

这样一来,生产上的加密盐通过命令输入,不存在配置文件中,就可以避免被人获取了。

......

结束!!!听说还有将salt(盐)配置在系统环境变量中的,大体上应该是如下套路,有兴趣的小伙伴可以实验下

打开/etc/profile文件
vim /etc/profile

文件末尾插入变量设置salt(盐)
export JASYPT_PASSWORD = XXX密码盐

编译 
source /etc/profile

运行 
java -jar -Djasypt_encryptor_password=${JASYPT_PASSWORD} xxx.jar

 

你可能感兴趣的:(Spring,Cloud,Spring,Boot)