springboot密码加密,springboot配置文件加密

前言一般情况下,配置文件会包含数据库账号密码、业务的一些密钥等重要的敏感信息,如果这些信息泄露,会产生严重后果,因此对这些敏感信息加密是必不可少的。Jasypt这 是一个 java 库,它允许开发人员以最小的努力将基本的加密功能添加到他/她...

前言

一般情况下,配置文件会包含数据库账号密码、业务的一些密钥等重要的敏感信息,如果这些信息泄露,会产生严重后果,因此对这些敏感信息加密是必不可少的。

Jasypt

这 是一个 java 库,它允许开发人员以最小的努力将基本的加密功能添加到他/她的项目中,而无需深入了解密码学的工作原理 ,官网如下:http://www.jasypt.org/

其最核心的步骤就两个:

  1. 添加jasypt依赖
  2. 添加配置

Jasypt示例

构建springboot项目,该示例是基于springboot版2.7.3,jdk17,jasypt版本是3.04

1.引入依赖

<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.4</version></dependency>

2.配置文件

这是数据库账号密码的一个配置

spring.datasource.username=rootspring.datasource.password=root

现在需要对username和password进行加密,加密后的结果如下:

spring.datasource.username=ENC(eIOQM9aChGP4/CQk7RXAM7ZSK7AIBI9faeQb31M5/ouChpMIDHlB2+uSsIaZmxQU)spring.datasource.password=ENC(Y+tFn7NIUjXhUjtyfpDmI7EfL9ORPiRKSKrnxU+3wfFcHUo9cl2/wv4uAlc56lng)

ENC()是jasypt的一个标识符

3.利用代码程序加密(写一个加密工具)

这是一个小demo,所有的项目都可以使用这个工具生成加密密码

springboot密码加密,springboot配置文件加密

核心代码如下:

package com.xm.demo.common.jasypt;import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;import org.jasypt.iv.RandomIvGenerator;import org.springframework.stereotype.Component;@Componentpublic class Jasypt { private static final String PBEWITHMD5ANDDES = "PBEWithMD5AndDES"; private static final String PBEWITHHMACSHA512ANDAES_256 = "PBEWITHHMACSHA512ANDAES_256"; /** * 加密 * @param str 加密的字符 * @param salt 密钥 * @return java.lang.String */ public String encryption(String str,String salt){ StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setPassword(salt); encryptor.setAlgorithm(PBEWITHHMACSHA512ANDAES_256); encryptor.setIvGenerator(new RandomIvGenerator()); return encryptor.encrypt(str); } /** * 解密 * @param str 解密的字符 * @param salt 密钥 * @return java.lang.String */ public String decryption(String str, String salt){ StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setPassword(salt); encryptor.setAlgorithm(PBEWITHHMACSHA512ANDAES_256); encryptor.setIvGenerator(new RandomIvGenerator()); return encryptor.decrypt(str); }}

4.添加配置参数

jasypt.encryptor.password=demo

这个配置是必须的,但这里有个问题就是,把加密的密钥放到配置文件里,如果泄露了,别人还是可以解密的,因此需要把这个配置放到别的地方去,当然开发阶段把密钥放到配置中是没有问题的。

方式一: 直接作为程序启动时的命令行参数来带入

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

方式二: 直接作为程序启动时的应用环境变量来带入

java -Djasypt.encryptor.password=demo -jar xxx.jar

5.jasypt配置扩展

jasypt.encryptor.password=demo #加密密钥jasypt.encryptor.algorithm=PBEWITHHMACSHA512ANDAES_256 #加密算法(默认)jasypt.encryptor.property.prefix=ENC( #标识符jasypt.encryptor.property.suffix=) #标识符

实际开发的流程是这样的:

运维提供加密后的信息和密钥,例如加密后的账号密码,然后开发人员只需要在pom文件中添加jaspyt依赖,以及配置文件中加上jasypt.encryptor.password=密钥(开发阶段)。项目上线了,运维会把密钥作为程序启动时的命令行参数来带入 。

版权:本文由用户自行上传,观点仅代表作者本人,本站仅供存储服务。如有侵权,请联系管理员删除,了解详情>>

发布
问题