广告
返回顶部
首页 > 资讯 > 精选 >springboot项目数据库密码怎么实现加密
  • 103
分享到

springboot项目数据库密码怎么实现加密

2023-06-08 07:06:54 103人浏览 八月长安
摘要

这篇文章主要介绍了SpringBoot项目数据库密码怎么实现加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot项目数据库密码怎么实现加密文章都会有所收获,下面我们一起来看看吧。方案一、使用d

这篇文章主要介绍了SpringBoot项目数据库密码怎么实现加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot项目数据库密码怎么实现加密文章都会有所收获,下面我们一起来看看吧。

方案一、使用druid数据库连接池对数据库密码加密

1、pom.xml引入druid包

为了方便其他的操作,这边直接引入druid的starter

<dependency>   <groupId>com.alibaba</groupId>   <artifactId>druid-spring-boot-starter</artifactId>   <version>${druid.version}</version>  </dependency>

2、利用com.alibaba.druid.filter.config.ConfigTools生成公私钥

ps: 生成的方式有两种,一种利用命令行生成,一种直接写个工具类生成。本文示例直接采用工具类生成

工具类代码如下

public final class DruidEncryptorUtils {    private static String privateKey;    private static String publicKey;    static {        try {            String[] keyPair = ConfigTools.genKeyPair(512);            privateKey = keyPair[0];            System.out.println(String.fORMat("privateKey-->%s",privateKey));            publicKey = keyPair[1];            System.out.println(String.format("publicKey-->%s",publicKey));        } catch (NoSuchAlGorithmException e) {            e.printStackTrace();        } catch (NoSuchProviderException e) {            e.printStackTrace();        }    }        @SneakyThrows    public static String encode(String plaintext){        System.out.println("明文字符串:" + plaintext);        String ciphertext = ConfigTools.encrypt(privateKey,plaintext);        System.out.println("加密后字符串:" + ciphertext);        return ciphertext;    }        @SneakyThrows    public static String decode(String ciphertext){        System.out.println("加密字符串:" + ciphertext);        String plaintext = ConfigTools.decrypt(publicKey,ciphertext);        System.out.println("解密后的字符串:" + plaintext);        return plaintext;    }

3、修改数据库的配置文件内容信息

a 、 修改密码
把密码替换成用DruidEncryptorUtils这个工具类生成的密码

 passWord: ${DATASOURCE_PWD:HB5FmUeAI1U81YJrT/T6awImFg1/Az5o8imy765WkVJouOubC2H80jqmZrr8L9zWKuzS/8aGzuQ4YySAkhywnA==}

b、 filter开启config

 filter:                config:                    enabled: true

c、配置connectionProperties属性

 connection-properties: config.decrypt=true;config.decrypt.key=${spring.datasource.publickey}

ps: spring.datasource.publickey为工具类生成的公钥

附录: 完整数据库配置

spring:    datasource:        type: com.alibaba.druid.pool.DruidDataSource        driverClassName: com.mysql.cj.jdbc.Driver        url: ${DATASOURCE_URL:jdbc:Mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai}        username: ${DATASOURCE_USERNAME:root}        password: ${DATASOURCE_PWD:HB5FmUeAI1U81YJrT/T6awImFg1/Az5o8imy765WkVJouOubC2H80jqmZrr8L9zWKuzS/8aGzuQ4YySAkhywnA==}        publickey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIvP9xF4RCM4oFiu47NZY15iqNOAB9K2Ml9fiTLa05CWaXK7uFwBImR7xltZM1frl6ahWAXJB6a/FSjtJkTZUJECAwEAAQ==        druid:            # 初始连接数            initialSize: 5            # 最小连接池数量            minIdle: 10            # 最大连接池数量            maxActive: 20            # 配置获取连接等待超时的时间            maxWait: 60000            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒            timeBetweenEvictionRunsMillis: 60000            # 配置一个连接在池中最小生存的时间,单位是毫秒            minEvictableIdleTimeMillis: 300000            # 配置一个连接在池中最大生存的时间,单位是毫秒            maxEvictableIdleTimeMillis: 900000            # 配置检测连接是否有效            validationQuery: SELECT 1 FROM DUAL            testWhileIdle: true            testOnBorrow: false            testOnReturn: false            WEBStatFilter:                enabled: true            statViewServlet:                enabled: true                # 设置白名单,不填则允许所有访问                allow:                url-pattern: /druid    public static String encode(String plaintext){        System.out.println("明文字符串:" + plaintext);        String ciphertext = basicTextEncryptor.encrypt(plaintext);        System.out.println("加密后字符串:" + ciphertext);        return ciphertext;    }        public static String decode(String ciphertext){        System.out.println("加密字符串:" + ciphertext);        ciphertext = "ENC(" + ciphertext + ")";        if (PropertyValueEncryptionUtils.isEncryptedValue(ciphertext)){            String plaintext = PropertyValueEncryptionUtils.decrypt(ciphertext,basicTextEncryptor);            System.out.println("解密后的字符串:" + plaintext);            return plaintext;        }        System.out.println("解密失败");        return "";    }}

3、修改数据库的配置文件内容信息

a、 用ENC包裹用JasyptEncryptorUtils 生成的加密串

password: ${DATASOURCE_PWD:ENC(P8m43qmzqN4c07DCTPey4Q==)}

b、 配置密钥和指定加解密算法

jasypt:    encryptor:        password: lybgeek        algorithm: PBEWithMD5AndDES        iv-generator-classname: org.jasypt.iv.NoIvGenerator

因为我工具类使用的是加解密的工具类是BasicTextEncryptor,其对应配置加解密就是PBEWithMD5AndDES和org.jasypt.iv.NoIvGenerator

ps: 在生产环境中,建议使用如下方式配置密钥,避免密钥泄露

java -jar -Djasypt.encryptor.password=lybgeek

附录: 完整数据库配置

spring:    datasource:        type: com.alibaba.druid.pool.DruidDataSource        driverClassName: com.mysql.cj.jdbc.Driver        url: ${DATASOURCE_URL:ENC(kT/gwazwzaFNEp7OCbsGCQN7PHRohaTKJNdGVgLsW2cH67zqBVEq7mN0BTIXAeF4/Fvv4l7myLFx0y6ap4umod7C2VWgyRU5UQtKmdwzQN3hxVxktIkrFPn9DM6+YahM0xP+ppO9HaWqA2ral0ejBCvmor3WScJNHCAhI9kHjYc=)}        username: ${DATASOURCE_USERNAME:ENC(rEQLlqM5nphqnsuPj3MlJw==)}        password: ${DATASOURCE_PWD:ENC(P8m43qmzqN4c07DCTPey4Q==)}        druid:            # 初始连接数            initialSize: 5            # 最小连接池数量            minIdle: 10            # 最大连接池数量            maxActive: 20            # 配置获取连接等待超时的时间            maxWait: 60000            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒            timeBetweenEvictionRunsMillis: 60000            # 配置一个连接在池中最小生存的时间,单位是毫秒            minEvictableIdleTimeMillis: 300000            # 配置一个连接在池中最大生存的时间,单位是毫秒            maxEvictableIdleTimeMillis: 900000            # 配置检测连接是否有效            validationQuery: SELECT 1 FROM DUAL            testWhileIdle: true            testOnBorrow: false            testOnReturn: false            webStatFilter:                enabled: true            statViewServlet:                enabled: true                # 设置白名单,不填则允许所有访问                allow:                url-pattern: /druidpublic final class EncryptorUtils {    private static String secreTKEy;    static {        secretKey = Hex.encodeHexString(SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded());        System.out.println("secretKey-->" + secretKey);        System.out.println("--------------------------------------------------------------------------------------");    }        @SneakyThrows    public static String encode(String plaintext){        System.out.println("明文字符串:" + plaintext);        byte[] key = Hex.decodeHex(secretKey.toCharArray());        String ciphertext =  SecureUtil.aes(key).encryptHex(plaintext);        System.out.println("加密后字符串:" + ciphertext);        return ciphertext;    }        @SneakyThrows    public static String decode(String ciphertext){        System.out.println("加密字符串:" + ciphertext);        byte[] key = Hex.decodeHex(secretKey.toCharArray());        String plaintext = SecureUtil.aes(key).decryptStr(ciphertext);        System.out.println("解密后的字符串:" + plaintext);        return plaintext;    }        @SneakyThrows    public static String encode(String secretKey,String plaintext){        System.out.println("明文字符串:" + plaintext);        byte[] key = Hex.decodeHex(secretKey.toCharArray());        String ciphertext =  SecureUtil.aes(key).encryptHex(plaintext);        System.out.println("加密后字符串:" + ciphertext);        return ciphertext;    }        @SneakyThrows    public static String decode(String secretKey,String ciphertext){        System.out.println("加密字符串:" + ciphertext);        byte[] key = Hex.decodeHex(secretKey.toCharArray());        String plaintext = SecureUtil.aes(key).decryptStr(ciphertext);        System.out.println("解密后的字符串:" + plaintext);        return plaintext;    }}

2、编写后置处理器

public class DruidDataSourceEncyptBeanPostProcessor implements BeanPostProcessor {    private CustomEncryptProperties customEncryptProperties;    private DataSourceProperties dataSourceProperties;    public DruidDataSourceEncyptBeanPostProcessor(CustomEncryptProperties customEncryptProperties, DataSourceProperties dataSourceProperties) {        this.customEncryptProperties = customEncryptProperties;        this.dataSourceProperties = dataSourceProperties;    }    @Override    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {        if(bean instanceof DruidDataSource){            if(customEncryptProperties.isEnabled()){                DruidDataSource druidDataSource = (DruidDataSource)bean;                System.out.println("--------------------------------------------------------------------------------------");                String username = dataSourceProperties.getUsername();                druidDataSource.setUsername(EncryptorUtils.decode(customEncryptProperties.getSecretKey(),username));                System.out.println("--------------------------------------------------------------------------------------");                String password = dataSourceProperties.getPassword();                druidDataSource.setPassword(EncryptorUtils.decode(customEncryptProperties.getSecretKey(),password));                System.out.println("--------------------------------------------------------------------------------------");                String url = dataSourceProperties.getUrl();                druidDataSource.setUrl(EncryptorUtils.decode(customEncryptProperties.getSecretKey(),url));                System.out.println("--------------------------------------------------------------------------------------");            }        }        return bean;    }}

3、修改数据库的配置文件内容信息

a 、 修改密码
把密码替换成用自定义加密工具类生成的加密密码

  password: ${DATASOURCE_PWD:fb31cdd78a5fa2c43f530b849f1135e7}

b 、 指定密钥和开启加密功能

custom:    encrypt:        enabled: true        secret-key: 2f8ba810011e0973728afa3f28a0ecb6

ps: 同理secret-key最好也不要直接暴露在配置文件中,可以用-Dcustom.encrypt.secret-key指定
附录: 完整数据库配置

spring:    datasource:        type: com.alibaba.druid.pool.DruidDataSource        driverClassName: com.mysql.cj.jdbc.Driver        url: ${DATASOURCE_URL:dcb268cf3a2626381d2bc5c96f94fb3D7f99352e0e392362cb818a321b0ca61f3a8dad3aeb084242b745c61a1d3dc244ed1484bf745c858c44560dde10e60e90ac65f77ce2926676df7af6b35aefd2bb984ff9a868f1f9052ee9cae5572fa015b66a602f32df39fb1bbc36e04cc0f148e4d610a3e5d54f2eb7c57e4729c9d7b4}        username: ${DATASOURCE_USERNAME:61db3bf3c6d3fe3ce87549c1af1e9061}        password: ${DATASOURCE_PWD:fb31cdd78a5fa2c43f530b849f1135e7}        druid:            # 初始连接数            initialSize: 5            # 最小连接池数量            minIdle: 10            # 最大连接池数量            maxActive: 20            # 配置获取连接等待超时的时间            maxWait: 60000            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒            timeBetweenEvictionRunsMillis: 60000            # 配置一个连接在池中最小生存的时间,单位是毫秒            minEvictableIdleTimeMillis: 300000            # 配置一个连接在池中最大生存的时间,单位是毫秒            maxEvictableIdleTimeMillis: 900000            # 配置检测连接是否有效            validationQuery: SELECT 1 FROM DUAL            testWhileIdle: true            testOnBorrow: false            testOnReturn: false            webStatFilter:                enabled: true            statViewServlet:                enabled: true                # 设置白名单,不填则允许所有访问                allow:                url-pattern: /druid/*                # 控制台管理用户名和密码                login-username:                login-password:            filter:                stat:                    enabled: true                    # 慢SQL记录                    log-slow-sql: true                    slow-sql-millis: 1000                    merge-sql: true                wall:                    config:                        multi-statement-allow: truecustom:    encrypt:        enabled: true        secret-key: 2f8ba810011e0973728afa3f28a0ecb6

关于“springboot项目数据库密码怎么实现加密”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“springboot项目数据库密码怎么实现加密”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: springboot项目数据库密码怎么实现加密

本文链接: https://www.lsjlt.com/news/252748.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot项目数据库密码怎么实现加密
    这篇文章主要介绍了springboot项目数据库密码怎么实现加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot项目数据库密码怎么实现加密文章都会有所收获,下面我们一起来看看吧。方案一、使用d...
    99+
    2023-06-08
  • springboot项目数据库密码怎么加密
    这篇文章主要介绍“springboot项目数据库密码怎么加密”,在日常操作中,相信很多人在springboot项目数据库密码怎么加密问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”springboot项目数据库...
    99+
    2023-06-20
  • springboot项目数据库密码如何加密
    前言 在我们日常开发中,我们可能很随意把数据库密码直接明文暴露在配置文件中,在开发环境可以这么做,但是在生产环境,是相当不建议这么做,毕竟安全无小事,谁也不知道哪天密码就莫名其妙泄...
    99+
    2022-11-12
  • SpringBoot项目中如何利用application.yml文件配置数据库密码加密
    这篇文章主要讲解了“SpringBoot项目中如何利用application.yml文件配置数据库密码加密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot项目中如何利用ap...
    99+
    2023-06-08
  • 使用springboot怎么对数据库密码进行加密
    使用springboot怎么对数据库密码进行加密?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.导入依赖<dependency> &nb...
    99+
    2023-06-14
  • springboot数据库密码加密的配置方法
    前言 由于系统安全的考虑,配置文件中不能出现明文密码的问题,本文就给大家详细介绍下springboot配置数据库密码加密的方法,下面话不多说了,来一起看看详细的介绍吧 1.导入依赖 ...
    99+
    2022-11-12
  • Vue项目怎么实现rsa加密
    这篇“Vue项目怎么实现rsa加密”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue项目怎么实现rsa加密”文章吧。安装j...
    99+
    2023-07-02
  • 如何在PHP项目中实现数据加密和解密?
    如何在PHP项目中实现数据加密和解密?随着互联网的发展,数据安全成为了一个非常重要的问题。在PHP项目中,我们经常需要处理一些敏感的数据,如用户密码、用户信息等。为了保护这些数据不被恶意获取,我们需要对其进行加密和解密操作。本文将介绍如何在...
    99+
    2023-11-02
    数据加密:encrypt 数据解密:decrypt PHP项目:PHP project
  • java项目中如何实现数据的加密与解密
    java项目中如何实现数据的加密与解密?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  这是一个关于密钥查询的jsp文件,接受上级文件的数据并加密处理,放入Map集合...
    99+
    2023-05-31
    java 加密 解密
  • 数据库内密码需要怎么加密
    数据库中对密码进行加密的方法有以下几种BASE64加密方法如下:String encode = (new BASE64Encoder()).encode(s.getBytes());System.out.println(encode);by...
    99+
    2022-10-16
  • springboot 项目使用jasypt加密数据源的方法
    引入maven 坐标 <dependency> <groupId>com.github.ulisesbocchio</groupI...
    99+
    2022-11-12
  • edb数据库怎么加密码
    使用易语言对edb数据库设置密码的方法首先,打开并进入易语言编程软件;在软件界面中点击上方的“数据库”按钮,并在下拉中选择“结构编辑器”选项;进入到结构编译器页面后,在界面中点击“设置密码”按钮;在弹出的文件选择对话框中,选择需要设置密码的...
    99+
    2022-10-05
  • SpringBoot实现Md5对数据库数据加密的示例
    目录MD5概述:MD5主要特点:MD5的性质:MD5用途:AES算法简介AES算法原理⛵小结因为开学等各种原因,导致更新的速度越来越慢,当然在此期间也进行了一些其他技术的学习,今天给...
    99+
    2023-05-15
    SpringBoot Md5加密 SpringBoot Md5
  • SpringBoot怎么实现api加密
    这篇“SpringBoot怎么实现api加密”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎么实现api...
    99+
    2023-06-08
  • MySQL数据库中怎么实现加密
    这篇文章将为大家详细讲解有关MySQL数据库中怎么实现加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如何加密对于 Java 项目来说,要想快速实现数据库...
    99+
    2022-10-18
  • 怎么给mysql数据库中密码属性加密
    mysql数据库给密码属性加密的方法有以下几种使用password()函数加密select password('root');sy old_password()函数加密select old_...
    99+
    2022-10-12
  • druid数据源密码怎么加密
    对druid数据源密码进行加密的方法首先,在druid中新建一个数据源配置类;@Configurationpublic class DruidConfig {@Value("${spring.datasource.publicKey}")p...
    99+
    2022-10-06
  • 如何在vuejs项目中使用md5加密密码的实现
    目录1、NPM 安装:2、全局用法3.局部用法概念MD5加密有什么用?为什么要使用MD5加密?MD5算法的用途是什么?具体使用步骤: 1、NPM 安装: npm install --...
    99+
    2022-11-13
    vue md5加密密码 vue md5加密
  • SpringBoot中怎么实现api加密
    这篇文章将为大家详细讲解有关SpringBoot中怎么实现api加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是RSA加密首先我们当然是了解RSA加密RSA加密是一种非对称加密。可以...
    99+
    2023-06-20
  • 关于Springboot数据库配置文件明文密码加密解密的问题
    有时候因为安全问题,需要把配置文件的中数据库用户名密码由明文改成密文,大多数其实是为了应付甲方而已。 1.pom.xml引入依赖 <dependency> <...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作