前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pig4Cloud之jasypt 配置文件加密

Pig4Cloud之jasypt 配置文件加密

原创
作者头像
一觉睡到小时候
发布2022-12-07 14:11:30
3210
发布2022-12-07 14:11:30
举报
文章被收录于专栏:国产程序员国产程序员

## 简介

Jasypt是一个Java简易加密库,用于加密配置文件中的敏感信息,如数据库密码。jasypt库与springboot集成,在实际开发中非常方便。

## 引入Jasypt依赖

```

<dependency>

<groupId>com.github.ulisesbocchio</groupId>

<artifactId>jasypt-spring-boot-starter</artifactId>

<version>2.1.0</version>

</dependency>

```

## 配置使用

将加密后的配置信息使用ENC函数,添加到配置文件中,应用启动加载配置文件时,会自动解密。

Jasypt默认使用的算法为PBEWithMD5AndDES,该算法需要一个加密密钥,可以在应用启动时指定。也可以直接写入配置文件,安全性稍差。

```

jasypt:

encryptor:

password: password

```

注意:这里指定加密密钥为password

## 工具类

```

package com.keafmd.springdemo.utils;

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;

import org.jasypt.encryption.pbe.StandardPBEByteEncryptor;

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

/**

* Keafmd

*

* @ClassName: JasyptUtils

* @Description:

* @author: 牛哄哄的柯南

* @date: 2022-04-25 11:18

*/

public class JasyptUtils {

/**

* Jasypt生成加密结果

*

* @param password 配置文件中设定的加密密码 jasypt.encryptor.password

* @param value 待加密值

* @return

*/

public static String encryptPwd(String password, String value) {

PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor();

encryptOr.setConfig(cryptOr(password));

String result = encryptOr.encrypt(value);

return result;

}

/**

* 解密

*

* @param password 配置文件中设定的加密密码 jasypt.encryptor.password

* @param value 待解密密文

* @return

*/

public static String decyptPwd(String password, String value) {

PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor();

encryptOr.setConfig(cryptOr(password));

String result = encryptOr.decrypt(value);

return result;

}

/**

* @param password salt

* @return

*/

public static SimpleStringPBEConfig cryptOr(String password) {

SimpleStringPBEConfig config = new SimpleStringPBEConfig();

config.setPassword(password);

config.setAlgorithm(StandardPBEByteEncryptor.DEFAULT_ALGORITHM);

config.setKeyObtentionIterations("1000");

config.setPoolSize("1");

config.setProviderName(null);

config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");

config.setStringOutputType("base64");

return config;

}

public static void main(String[] args) {

// 加密

// 盐值替换成自己熟悉的口令,此口令为解密密钥,需要妥善保管。

// 盐值也需要在第三步写入配置文件

System.out.println(encryptPwd("keafmd", "123456"));

}

}

```

## 修改配置文件

把明文密码替换为工具类生成的密文,并用ENC()包着

```

datasource:

master:

url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai

username: root

password: ENC(r7PD0+haO/ALC+txojmG/A==)

driver-class-name: com.mysql.cj.jdbc.Driver

```

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档