spring优雅的密码加密

spring优雅的密码加密

文章目录

  • spring优雅的密码加密
    • 一、简介
    • 二、spring加密工具jasypt
      • 2.1、springboot集成实现
        • 2.1.1、jar包引用
        • 2.1.2、密文生成
        • 2.1.3、配置文件配置
        • 2.1.4、注意事项

一、简介

在开发中我们经常在配置文件中采用明文密码,例如数据库连接信息,服务器账号密码,超级管理员账号,服务器IP地址,端口等等,这些信息一旦流露到外网会造成很大的灾难和影响。

二、spring加密工具jasypt

这里推荐大家使用一款开源的密码加密工具jasypt,他可以通过设置自己独属的密钥,来对敏感信息进行加密,支持直接在appcliation.properties配置文件里进行配置,自动进行解密,实现与业务的解耦。通过jasypt生成的密文每次都是不同的,但都可以解密成唯一的明文。

2.1、springboot集成实现

2.1.1、jar包引用

<dependency>
    <groupId>com.github.ulisesbocchiogroupId>
    <artifactId>jasypt-spring-boot-starterartifactId>
    <version>2.0.0version>
dependency>

2.1.2、密文生成

把明文加密成密文可以直接使用jasypt包来生成密文

// 在org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar包下执行
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="密文" password=jingxuan

其中input内容为密码明文,password内容为加密的密钥

也可在java代码中调用jasypt中的方法来实现

//加密方法
public static String doEncrypt(String key, String words) {
    BasicTextEncryptor encryptor = new BasicTextEncryptor();
    encryptor.setPassword(key);
    //加密
    String encryptWords = encryptor.encrypt(words);
    return encryptWords;
}

//解密方法
public static String doDecrypt(String key, String encryptWords) {
    //解密
    BasicTextEncryptor encryptor = new BasicTextEncryptor();
    encryptor.setPassword(key);
    String decryptWords = encryptor.decrypt(words);
    return decryptWords;
}

其中key值为加密密钥,words为密码明文

2.1.3、配置文件配置

在appcliation.properties中进行配置

#密码加密密钥(配置在环境变量中)
jasypt.encryptor.password=jingxuan

##datasource config
spring.datasource.url=jdbc:mysql://${spring.datasource.ip}/oa?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
spring.datasource.ip=ENC(tI01R8iSoIezJVusT0ZT4k7jWkHwQq3sMelEQqTXNdY=)
spring.datasource.username=ENC(O7GJgVJ8uYFjVZYFPKDXGQ==)
spring.datasource.password=ENC(89BhK6YeT4fuiKbI9anJ8w==)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

其中:
jasypt.encryptor.password实现对自己密钥的key值配置
ENC(密文)对需要实现解密的文本使用

2.1.4、注意事项

在实际的应用中,强烈不推荐采用直接在配置文件中配置jasypt.encryptor.password=jingxuan的形式来配置加密和解密的密钥,这样一旦配置文件泄露,密码就又变成了裸奔的形式

  • 在开发中我们可以通过添加应用的启动参数 --jasypt.encryptor.password=jingxuan来指定密钥,以idea为例子

  • 在生产环境中,也可通过添加启动参数来配置密钥,例如

    java -jar xxx.jar --jasypt.encryptor.password=jingxuan
    

你可能感兴趣的:(java,springboot系列,工具使用)