MySQL敏感数据进行加密的几种方法

  1. 使用MySQL内置的加密函数

    • AES_ENCRYPT和AES_DECRYPT函数
      • 方法介绍
        • AES(Advanced Encryption Standard)是一种对称加密算法。在MySQL中,可以使用AES_ENCRYPT函数对数据进行加密,使用AES_DECRYPT函数进行解密。这种加密方式的特点是加密和解密使用相同的密钥。
      • 示例
        • 首先,创建一个表来存储加密后的数据:
          CREATE TABLE encrypted_data (id INT AUTO_INCREMENT PRIMARY KEY,encrypted_text BLOB
          );
          
        • 然后,假设要加密的文本是'Sensitive Information',密钥是'MySecretKey',插入加密后的数据:
          SET @sensitive_text = 'Sensitive Information';
          SET @encryption_key = 'MySecretKey';
          INSERT INTO encrypted_data (encrypted_text)
          VALUES (AES_ENCRYPT(@sensitive_text, @encryption_key));
          
        • 当需要读取数据时,进行解密:
          SELECT AES_DECRYPT(encrypted_text, @encryption_key)
          FROM encrypted_data;
          
    • MD5函数(单向加密,用于验证)
      • 方法介绍
        • MD5是一种单向加密哈希函数,它将任意长度的数据转换为固定长度(128位)的哈希值。由于它是单向的,无法从哈希值还原出原始数据。通常用于验证数据是否被篡改,例如存储用户密码的哈希值,在用户登录时比较输入密码的哈希值和存储的哈希值是否一致。
      • 示例
        • 假设存储用户密码,创建一个表:
          CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50),password_hash VARCHAR(32)
          );
          
        • 当用户注册时,计算密码的MD5哈希值并存储:
          SET @password = 'UserPassword';
          SET @password_hash = MD5(@password);
          INSERT INTO users (username, password_hash)
          VALUES ('User', @password_hash);
          
        • 在用户登录时,验证密码:
          SET @input_password = 'UserPassword';
          SET @stored_password_hash = (SELECT password_hash FROM users WHERE username = 'User');
          IF MD5(@input_password) = @stored_password_hash THENSELECT 'Password is correct';
          ELSESELECT 'Password is incorrect';
          END IF;
          
        • 需要注意的是,由于MD5存在碰撞等安全隐患,在安全性要求较高的场景下,现在更推荐使用如SHA - 256等更安全的哈希函数。
  2. 使用透明数据加密(TDE)

    • 方法介绍
      • TDE是一种在数据库层面提供的加密解决方案。它可以对整个数据库、表空间或者特定的表进行加密。MySQL企业版支持TDE,其原理是在数据写入磁盘时自动进行加密,在从磁盘读取数据时自动解密。这样可以在不改变应用程序对数据库访问方式的情况下,提供数据的安全性。TDE通常使用数据库服务器的密钥管理基础设施(KMI)来管理加密密钥。
    • 示例(以MySQL企业版为例)
      • 首先,需要在服务器上配置密钥管理,这通常涉及到安装和配置专门的密钥管理软件或者使用硬件安全模块(HSM)。
      • 假设要对一个数据库进行加密,在MySQL配置文件(my.cnfmy.ini)中添加如下配置:
        [mysqld]
        early-plugin - load = keyring_file.so
        keyring_file_data = /path/to/keyring/file
        
      • 重启MySQL服务后,使用CREATE TABLESPACE命令创建加密的表空间,例如:
        CREATE TABLESPACE encrypted_tablespace
        ADD DATAFILE 'encrypted_file.ibd'
        ENCRYPTION = 'Y'
        KEY_BLOCK_SIZE = 16;
        
      • 然后,可以在这个加密的表空间中创建表来存储加密后的数据。这样,存储在这个表空间中的数据在磁盘上就是加密的状态。
  3. 应用层加密

    • 方法介绍
      • 在应用程序层面进行加密,可以提供更灵活的加密方式。例如,使用编程语言(如Python、Java等)中的加密库对敏感数据进行加密后再存储到MySQL数据库中。这种方式可以更好地控制加密密钥的管理和加密算法的选择,同时也可以根据业务逻辑的需要进行更复杂的加密操作。
    • 示例(以Python为例)
      • 假设使用cryptography库对数据进行加密,首先需要安装cryptography库(pip install cryptography)。
      • 示例代码如下:
        from cryptography.fernet import Fernet
        import mysql.connector# 生成密钥
        key = Fernet.generate_key()
        cipher_suite = Fernet(key)# 要加密的敏感数据
        sensitive_data = "Confidential Data".encode('utf - 8')
        encrypted_data = cipher_suite.encrypt(sensitive_data)# 连接到MySQL数据库
        mydb = mysql.connector.connect(host="localhost",user="your_user",password="your_password",database="your_database"
        )
        mycursor = mydb.cursor()# 创建表来存储加密数据
        mycursor.execute("CREATE TABLE if not exists encrypted_data (id INT AUTO_INCREMENT PRIMARY KEY, encrypted_text BLOB)")
        # 插入加密后的数据
        mycursor.execute("INSERT INTO encrypted_data (encrypted_text) VALUES (%s)", (encrypted_data,))
        mydb.commit()# 读取加密数据并解密
        mycursor.execute("SELECT encrypted_text FROM encrypted_data")
        result = mycursor.fetchone()
        decrypted_data = cipher_suite.decrypt(result[0]).decode('utf - 8')
        print(decrypted_data)
        
      • 在这个示例中,使用cryptography库中的Fernet类生成密钥并对数据进行加密。加密后的数据存储到MySQL数据库的表中,在读取数据时再进行解密。这种方式可以根据具体的应用场景灵活地处理加密和解密过程,并且可以结合其他安全措施,如密钥的安全存储和管理等。

欢迎关注公众号《小周的数据库进阶之路》,更多精彩知识和干货尽在其中。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现

本篇教程将带你实现一个简易购物车功能。通过使用接口定义商品结构,我们将创建一个动态购物车,支持商品的添加、移除以及实时总价计算。 关键词 UI互动应用接口定义购物车功能动态计算商品管理列表操作 一、功能说明 简易购物车功能包含以下交互&#…

快速下载pytorch_geometric

注意:千万不要一上去就使用pip去安装!!! 1.找到GitHub手动下载所需依赖: https://github.com/pyg-team/pytorch_geometric 进入网址后点击此处: 2.点击here进去后寻找自己的torch版本(我的是torch2.1.2的…

微服务-1 认识微服务

目录​​​​​​​ 1 认识微服务 1.1 单体架构 1.2 微服务 1.3 SpringCloud 2 服务拆分原则 2.1 什么时候拆 2.2 怎么拆 2.3 服务调用 3. 服务注册与发现 3.1 注册中心原理 3.2 Nacos注册中心 3.3 服务注册 3.3.1 添加依赖 3.3.2 配置Nacos 3.3.3 启动服务实例 …

低代码开发中 DDD 领域驱动的页面权限控制

在低代码开发的领域中,应用安全与灵活性是两大关键考量因素。领域驱动设计(DDD)作为一种在软件设计领域广泛应用且颇具影响力的方法论,正逐渐在低代码开发的页面权限控制方面展现出其独特的价值与潜力。本文旨在客观地探讨如何借助…

找到一个linux静态库动态库的好资料.3

# 正文 继续整理从这个页面学到的东西:https://tldp.org/HOWTO/Program-Library-HOWTO。 之前的在这里:找到一个linux静态库动态库的好资料.0找到一个linux静态库动态库的好资料.1找到一个linux静态库动态库的好资料.2 这一篇继续看这个: https://tldp…

nginx 基于 geoip 模块限制地区访问

1、安装 geoip 库 [rootVM-0-15-centos ~]# yum -y install geoip geoip-devel 2、下载并安装 MaxMind 的免费 GeoIP 数据库。这里我选择下载 GeoLite2 数据库,适用于大多数应用。 访问 maxmind 官网(https://www.maxmind.com/)&#xff0c…

openfeign-一些配置

之前整理过一篇 openfeign的快速使用。openfeign简化服务间调用-笔记-CSDN博客 今天补充一下一些个性化配置。 一 日志: 默认的openfeign不输出日志,想看日志需要单独配置下。 日志级别 public static enum Level {NONE,BASIC,HEADERS,FULL;private…

【回溯】LeetCode经典题目总结:组合、排列、子集、分割、N皇后、单词搜索

回溯 组合问题组合总和全排列子集分割回文串N皇后电话号码的字母组合单词搜索括号生成 组合问题 给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 树形结构&#xff1…

HEIC 是什么图片格式?如何把 iPhone 中的 HEIC 转为 JPG?

在 iPhone 拍摄照片时,默认的图片格式为 HEIC。虽然 HEIC 格式具有高压缩比、高画质等优点,但在某些设备或软件上可能存在兼容性问题。因此,将 HEIC 格式转换为更为通用的 JPG 格式就显得很有必要。本教程将介绍如何使用简鹿格式工厂&#xf…

【实战示例】面向对象的需求建模

前言 博主准备写一个以面向对象为核心思想的软件需求建模、领域建模的系列,总结一整套可落地的DDD的打法,前面几篇文章论述了如何进行面向对象的需求建模,本文将以一个简单的购物商城的需求来演示如何进行面向对象的需求建模。 面向对象的需…

04-微服务02

我们将黑马商城拆分为5个微服务: 用户服务 商品服务 购物车服务 交易服务 支付服务 由于每个微服务都有不同的地址或端口,相信大家在与前端联调的时候发现了一些问题: 请求不同数据时要访问不同的入口,需要维护多个入口地址…

Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤

一、概述 记录时间 [2024-12-25] 本文讲述如何在 Windows 11 中进行 Node.js 工具的安装和配置。 以下是详细的步骤和说明。 二、安装 Node.js 1. 官网下载 通过官网,下载 Node.js,上面有好几种下载方式,文中下载的是 zip 压缩包。 如图&…

Element-plus自动导入

安装 npm i element-plus 自动引入 1. 安装两个插件 npm install -D unplugin-vue-components unplugin-auto-import2. 配置插件 vue3项目修改vite.config.js,把两个插件添加入即可,注意:不是覆盖原有配置 Vite // vite.config.js import { define…

基于FISCO BCOS的电子签章系统

概述 本项目致力于构建一个安全、高效且功能完备的电子印章系统,通过整合区块链技术与传统数据库管理,为用户提供了可靠的电子签章解决方案,有效应对传统电子签章系统的数据安全隐患,满足企业和个人在数字化办公环境下对电子文档…

【2025最新计算机毕业设计】基于SpringBoot+Vue在线考试系统(源码包运行)【提供源码+答辩PPT+文档+项目部署】

作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

如何设置Edge浏览器访问软件

使用Edge浏览器访问分销ERP A\V系列软件时会出现各种报错,如何设置Edge浏览器使其正常访问,请看下面的具体操作。 一、打开Edge浏览器,点击右上角的 设置及其他,如图: 二、在弹出界面中,点击 扩展&#xff…

[创业之路-222]:波士顿矩阵与GE矩阵在业务组合选中作用、优缺点比较

目录 一、波士顿矩阵 1、基本原理 2、各象限产品的定义及战略对策 3、应用 4、优点与局限性 二、技术成熟度模型与产品生命周期模型的配对 1、技术成熟度模型 2、产品生命周期模型 3、技术成熟度模型与产品生命周期模型的配对 三、产品生命周期与产品类型的对应关系 …

计算机图形学知识点汇总

一、计算机图形学定义与内容 1.图形 图形分为“图”和“形”两部分。 其中,“形”指形体或形状,存在于客观世界和虚拟世界,它的本质是“表示”;而图则是包含几何信息与属性信息的点、线等基本图元构成的画面,用于表达…

Tomcat介绍、下载安装、使用(部署项目)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

2024.12.29(进程线程实现并发服务器)

作业 多进程多线程并发服务器实现一遍提交。 服务器 #include <myhead.h> #define PORT 12345 #define IP "192.168.124.123"void *fun(void *fd) {int newfd *(int *)fd;char buff[1024];while(1){int res recv(newfd,buff,sizeof(buff),0);if(res 0){p…