广告
返回顶部
首页 > 资讯 > 数据库 >MySQL数据库中怎么实现加密
  • 340
分享到

MySQL数据库中怎么实现加密

2024-04-02 19:04:59 340人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关Mysql数据库中怎么实现加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如何加密?对于 Java 项目来说,要想快速实现数据

这篇文章将为大家详细讲解有关Mysql数据库中怎么实现加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

如何加密?

对于 Java 项目来说,要想快速实现数据库的加密,最简单可行的方案就是使用阿里巴巴提供的 Druid 来实现加密。

什么是Druid?

Druid(中文译为“德鲁伊”)是阿里巴巴开源的一款 Java 语言中最好的数据库连接池。Druid  提供了强大的监控和扩展功能,当然也包含了数据库的加密功能。

Druid 开源地址:https://GitHub.com/alibaba/druid/

Druid可以做什么?

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. Druid 可以监控数据库访问性能,Druid 内置提供了一个功能强大的 StatFilter 插件,能够详细统计 sql  的执行性能,这对于线上分析数据库访问性能有帮助。

  3. 替换数据库连接池 DBCP 和 C3P0,Druid 提供了一个高效、功能强大、可扩展性好的数据库连接池。

  4. 数据库密码加密,直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver 和 DruidDataSource 都支持  PassWordCallback。

  5. SQL 执行日志,Druid 提供了不同的 LogFilter,能够支持 Common-Logging、Log4j 和  jdkLog,你可以按需要选择相应的 LogFilter,监控你应用的数据库访问情况。

  6. 扩展 JDBC,如果你要对 JDBC 层有编程的需求,可以通过 Druid 提供的 Filter-Chain 机制,很方便编写 JDBC  层的扩展插件。

对于本文来说,我们重点来看它的第 3 个特性,也就是使用 Druid 来实现数据库密码加密。

加密执行流程

在没有进行密码加密之前,项目的交互流程是这样的:

MySQL数据库中怎么实现加密

在使用了密码加密之后,项目的交互流程就变成了这样:

MySQL数据库中怎么实现加密

使用Druid实现加密

本示例运行环境:

spring Boot 2.4.3   mysql 5.7   Java 1.8   idea 2020.1.3

1.添加Druid依赖

Maven 项目:

<dependency>    <groupId>com.alibaba</groupId>    <artifactId>druid-spring-boot-starter</artifactId>    <version>1.2.5</version> </dependency>

Gradle 项目:

compile 'com.alibaba:druid-spring-boot-starter:1.2.5'

获取 Druid  最新版本:Https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter

2.生成密文

Druid 添加完成之后就可以借助 Druid 中提供的 ConfigTools 类来加密密码了,实现代码如下:

import com.alibaba.druid.filter.config.ConfigTools;  class MyTests {     public static void main(String[] args) throws Exception {         // 需要加密的明文命名         String password = "youPassword"; // 【注意:这里要改为你自己的密码】         // 调用 druid 生成私钥、公钥、密文         ConfigTools.main(new String[]{password});     } }

以上代码执行的结果如下:

privateKey:MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEApOjcMWSDzJiKVGmtcBBoQPtM9tVW2H2cnS6xZK7NrbzQXYWLQD2zefIrrx9vMvqRIHEqkmAHTuUcUXHGCxu0cwIDAQABAkAlqo5ItdWo0Jqf5zdXJlg5p2yP4HCiqCYyfKzF+2s9KEmgWZJwtctZDsgQ0iYUohORR59I+J4nabhel1x5/INpAiEA6jwSyFqMUPOh2XlrzNFek+RthOQ5n4+ALPo+vULayO0CIQC0O7JM9sIq+tg+jCGv+ypk6vbuRKY9m5W2rSRXapGm3wIgRHul3jAjIDPrF/f1HaAFL+Y0Yws7Ebyp8/yCRWF7iA0CIALbe20q8FMcHPeI4zPWCIsHCpkmb3hEkjAOOKhgit8DAiAqiUuz92NqKeyjmOfons1ka65EzVwA3NDhZ6+IQcnuig== publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTo3DFkg8yYilRprXAQaED7TPbVVth9nJ0usWSuza280F2Fi0A9s3nyK68fbzL6kSBxKpJgB07lHFFx4AsbtHMCAwEAAQ== password:IMgKm27bOHok3/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h4jngSAqhqwqYnfuYpyVJ0k++q9xWWnHtd6sAWnQ==

从上述结果可以看出,使用 ConfigTools 类会生成 3 部分的内容:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. privateKey:私钥,暂时不会用到,用于密码的加密;

  3. publicKey:公钥,用于密码的解密;

  4. password:加密之后的密码。

  • PS:要实现数据库的加密,主要使用的是 publicKey(公钥)和 password(密文),这就把明文转换成密文了。

3.添加配置

完成了以上操作之后,只需要将上一步生成的公钥和密文添加到项目的配置文件  application.yml(或application.xml)中就实现了加密操作了,具体配置信息如下:

spring:   # MySQL 配置   datasource:     driver-class-name: com.mysql.cj.jdbc.Driver     type: com.alibaba.druid.pool.DruidDataSource     druid:       url: jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false       username: root       password: IMgKm27bOHok3/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h4jngSAqhqwqYnfuYpyVJ0k++q9xWWnHtd6sAWnQ==       # encrypt config       filters: config       connect-properties:         config.decrypt: true         config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTo3DFkg8yYilRprXAQaED7TPbVVth9nJ0usWSuza280F2Fi0A9s3nyK68fbzL6kSBxKpJgB07lHFFx4AsbtHMCAwEAAQ==

其中 password 对应的是上一步生成的 password(密文),而 config.decrypt.key 对应的是上一步生成的  publicKey(公钥),如下图所示:

MySQL数据库中怎么实现加密

这里提供一个原始的配置文件,以便和加密后的配置文件进行比对:

MySQL数据库中怎么实现加密

4.注意事项-插着钥匙的锁

经过前面 3 步的配置之后,我们的程序就可以正常运行了,但这远没有结束!

在第 3 步配置时,我们将密文和公钥都写入配置文件,这就会造成当有人拿到密文和公钥之后,就可以使用 Druid  将加密的密码还原出来了,这就好比一把插着钥匙的是极不安全的。

因此我们正确的使用姿势:是将公钥找一个安全的地方保存起来,每次在项目启动时动态的将公钥设置到项目中,这样就可以有效的保证密码的安全了。

正确的配置文件

接下来我们将 Spring Boot 的公钥设置为配置项,在项目运行时再替换为具体的值,最终的安全配置信息如下:

spring:   # MySQL 配置   datasource:     driver-class-name: com.mysql.cj.jdbc.Driver     type: com.alibaba.druid.pool.DruidDataSource     druid:       url: jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false       username: root       password: IMgKm27bOHok3/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h4jngSAqhqwqYnfuYpyVJ0k++q9xWWnHtd6sAWnQ==       # encrypt config       filters: config       connect-properties:         config.decrypt: true         config.decrypt.key: ${spring.datasource.druid.publickey}

可以看出公钥被修改成“${spring.datasource.druid.publickey}”了,这就相当于使用占位符先把坑给占上,等项目启动时再更换上具体的值。

  • PS:“spring.datasource.druid.publickey”并非是固定不可变的 key,此 key 值用户可自行定义。

开发环境替换公钥

开发环境只需要在 Idea 的启动参数中配置公钥的值即可,如下图所示:

 MySQL数据库中怎么实现加密

当我们输入正确的公钥值时程序可以正常运行,当输入一个错误的公钥值时就会提示解码失败,如下图所示:

MySQL数据库中怎么实现加密

生产环境替换公钥

生产环境在启动 jar 包时只需要动态设置公钥的值即可,参考以下命令:

java -jar xxx.jar --spring.datasource.druid.publickey=你的公钥

Druid运行原理经过上述步骤之后,我们就完成 MySQL 密码的加密了,这样当 Spring Boot 项目启动时,Druid  的拦截器会使用密文和公钥将密码还原成真实的密码以供项目使用,当然这一切都无需人工干预(无需编写任何代码),Druid  已经帮我封装好了,我们只需要通过以上配置即可。

什么?你想知道 Druid 是如何通过密文和公钥还原出真实的密码的?

没问题,满足你,其实 ConfigTools 类中已经提供了相应实现,代码如下:

// 密文 String password = "VwH1mu2IUpqjfKTd+gSikiZgJTi+3Y5zFIFRfxYnH1UqHzm1K8TIHnMaV3TErBaGsVEaGV0e63pb0Ys3Wdm7Kg=="; // 公钥 String publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALWIEp19IM04sB+vQXnEOH9gFNFdL5TFGSEhORgHj4MnfTfBSNaOoSgCaM8BOpjiHmwuEb7LpvmXI1x/ymUvNzECAwEAAQ=="; // 还原成真实的密码 String result = ConfigTools.decrypt(publicKey, password); System.out.println("最终结果:" + result);

关于MySQL数据库中怎么实现加密就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库中怎么实现加密

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL数据库中怎么实现加密
    这篇文章将为大家详细讲解有关MySQL数据库中怎么实现加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如何加密对于 Java 项目来说,要想快速实现数据库...
    99+
    2022-10-18
  • MySQL数据库中怎么实现双向加密
    MySQL数据库中怎么实现双向加密,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。    双向加密...
    99+
    2022-10-18
  • 怎么给mysql数据库中密码属性加密
    mysql数据库给密码属性加密的方法有以下几种使用password()函数加密select password('root');sy old_password()函数加密select old_...
    99+
    2022-10-12
  • springboot项目数据库密码怎么实现加密
    这篇文章主要介绍了springboot项目数据库密码怎么实现加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot项目数据库密码怎么实现加密文章都会有所收获,下面我们一起来看看吧。方案一、使用d...
    99+
    2023-06-08
  • mysql数据怎么加密
    在mysql中对数据进行加密的方法首先,在命令行中启动MySQL服务;service mysql start  MySQL服务启动后,在命令行中输入mysql的用户名和密码登录到MySQL;mysql -u root -p登录到MySQL后...
    99+
    2022-10-14
  • MySQL数据库对敏感数据加密及解密的实现方式
    大数据时代的到来,数据成为企业最重要的资产之一,数据加密的也是保护数据资产的重要手段。本文主要在结合学习通过MySQL函数及Python加密方法来演示数据加密的一些简单方式。 1. 准备工作 为了便于后面对比,将各种...
    99+
    2022-05-20
    mysql 数据加密解密 mysql 加密解密
  • MySql数据库加密函数AES_ENCRYPT
     加密函数: AES_ENCRYPT('需要加密的字符串','秘钥'); select AES_ENCRYPT('给我狗子','abc123'); 解密函数: AES_DECRYPT('需要解密的密码','秘钥') CREATE ...
    99+
    2023-09-10
    数据库 sql mysql
  • php配置数据库文件加密怎么实现
    实现 PHP 配置数据库文件加密可以通过以下步骤进行: 创建一个用于加密和解密的密钥。可以使用 OpenSSL 扩展的 opens...
    99+
    2023-10-27
    php 数据库
  • MySQL数据库加密与解密方式
    这篇文章主要介绍“MySQL数据库加密与解密方式”,在日常操作中,相信很多人在MySQL数据库加密与解密方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL数据库加密...
    99+
    2022-10-18
  • Sharding-Proxy分库分表和数据加密怎么实现
    这篇文章主要介绍“Sharding-Proxy分库分表和数据加密怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Sharding-Proxy分库分表和数据加密怎么实现”文章能帮助大家解决问题。...
    99+
    2023-06-30
  • edb数据库怎么加密码
    使用易语言对edb数据库设置密码的方法首先,打开并进入易语言编程软件;在软件界面中点击上方的“数据库”按钮,并在下拉中选择“结构编辑器”选项;进入到结构编译器页面后,在界面中点击“设置密码”按钮;在弹出的文件选择对话框中,选择需要设置密码的...
    99+
    2022-10-05
  • 怎么用对称加密算法实现C#数据加密
    这篇文章主要讲解了“怎么用对称加密算法实现C#数据加密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用对称加密算法实现C#数据加密”吧!以下是关于对称加密算法的C#数据加密实现代码,大家...
    99+
    2023-06-18
  • 数据库内密码需要怎么加密
    数据库中对密码进行加密的方法有以下几种BASE64加密方法如下:String encode = (new BASE64Encoder()).encode(s.getBytes());System.out.println(encode);by...
    99+
    2022-10-16
  • springboot项目数据库密码怎么加密
    这篇文章主要介绍“springboot项目数据库密码怎么加密”,在日常操作中,相信很多人在springboot项目数据库密码怎么加密问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”springboot项目数据库...
    99+
    2023-06-20
  • mysql数据库的加密函数介绍
    这篇文章运用简单易懂的例子给大家介绍mysql数据库的加密函数介绍,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。mysql加密函数有:1、AES_ENCRYPT(str,key):返回...
    99+
    2022-10-18
  • MySQL数据库中怎么修改密码
    今天就跟大家聊聊有关MySQL数据库中怎么修改密码,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  MySQL数据库修改MySQL密码有哪些措施  ...
    99+
    2022-10-18
  • mysql怎么附加数据库
    mysql附加数据库的方法:下载安装Navicat,它可以向sql server数据库发送SQL语句让它执行。安装好后,打开Navicat,连接数据库。打开SQL执行页面。假设你要附加的mdf数据库文件是c:\a.mdf和c:\a_log....
    99+
    2022-10-19
  • Mysql数据库中怎么实现数据同步
    Mysql数据库中怎么实现数据同步,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 安装配置两台服务器,分别安装好Mysql,都安装在 /u...
    99+
    2022-10-18
  • 云数据库MySQL开启透明数据加密
    云数据库MySQL可以通过以下步骤开启透明数据加密:1. 创建一个密钥管理服务(Key Management Service,KMS...
    99+
    2023-09-21
    数据库
  • 数据加密在什么层中实现
    在OSI分层结构中,表示层是处理所有与数据表示及运输有关的问题,包括转换、加密和压缩等功能的,在表示层中可以将将抽象语法转换成传送语法,并在对方实现相反的转换,涉及的内容有代码转换、字符转换、数据格式的修改,以及对数据结构操作的适应、数据压...
    99+
    2022-10-23
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作