首页 > 数据库 >MySQL敏感数据进行加密的几种方法

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

时间:2024-10-30 16:45:17浏览次数:7  
标签:加密 encrypted 密钥 MySQL 敏感数据 password data

  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 THEN
              SELECT 'Password is correct';
          ELSE
              SELECT '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数据库的表中,在读取数据时再进行解密。这种方式可以根据具体的应用场景灵活地处理加密和解密过程,并且可以结合其他安全措施,如密钥的安全存储和管理等。

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

标签:加密,encrypted,密钥,MySQL,敏感数据,password,data
From: https://blog.csdn.net/qq_36936192/article/details/143369526

相关文章

  • MySQL如何输出自己的AWR分析报告
    一、启用慢查询日志配置慢查询日志参数编辑MySQL配置文件(通常是my.cnf或my.ini),找到以下参数并进行设置。slow_query_log:将其设置为1以启用慢查询日志。例如:slow_query_log=1。long_query_time:定义查询执行时间的阈值,超过这个时间的查询会被记录到慢查询日志中。单......
  • MYSQL索引相关
    原sqlSELECTid,user_id,package_id,term_id,source,type,order_id,code_record_id,created_at,updated_at,version,is_deletedASdeletedFROMtbl_purchased_packageWHERE(ter......
  • MySQL双主配置
    1、配置的前置条件已知A服务器IP=192.168.0.11,B服务器IP=192.168.0.12建议使用相同版本的MySQL,若是小版本跨越一般是兼容的,如A的MySQL版本是5.7.1,B的MySQL版本是5.7.2;配置前需要保证两个数据库的数据一致,建议将A数据库同步到B数据库,以保证配置前A、B两台数据库的数据是一致的;......
  • Oracle、MySQL、ClickHouse的通用AES256加解密如何实现?
     Oracle、MySQL、ClickHouse的通用AES256加解密如何实现? 前段时间研究了加密算法aes,写了个文档,分享到博客上来。防。1  说明应XXX安全生产需求,对目标库目标表业务字段敏感信息进行加密密文存放,查询时通过解密得到明文进行数据使用,要求使用AES256。目前公司所使用主要......
  • HTTPS 加密方式
    1.HTTP和HTTPSHTTP是明文传输,敏感信息容易被中间劫持。HTTPS=HTTP+加密,即使传输的数据被劫持了也无法解密。2.加密方式:对称加密,非对称加密对称加密用同一个key加密解密。非对称加密一对key(公钥私钥),公钥加密,私钥解密(or反过来)。具体实现:1.客户端发起连接:你访问一......
  • MySQL数据库详细介绍:从入门到进阶
    MySQL是一个广泛使用的开源关系型数据库管理系统,被广泛应用于Web应用程序、企业级应用以及各种数据分析场景。本文将详细介绍MySQL数据库的基本概念、安装、配置、管理以及优化等方面的内容,帮助大家从入门到进阶了解MySQL。 一、MySQL安装可以通过以下链接下载MySQL安装包:......
  • MySQL 篇
    MySQL篇整体内容优化-如何定位慢查询如何定位慢查询问答环节优化-SQL语句执行的很慢,如何分析解决思路问答环节优化-索引概念及索引底层数据结构数据结构对比问答环节优化-聚簇索引、非聚簇索引、回表查询回表查询问答环节优化-覆盖索引、超大......
  • 唱戏机上的内存卡怎么加密?教你两个方法
    唱戏机是中老年人群休闲时光的好伴侣。然而,很多唱戏机商家都会面临一个困扰:如何保护唱戏机上内存卡中的音频,避免他人随意复制呢?今天这篇文章看完,问题将迎刃而解~数据隐藏将内存卡插到电脑上,对卡里的音频文件或直接在文件夹上单击鼠标右键,选择属性。属性界面,勾选隐藏,确定后......
  • 国标GB28181公网平台LiteGBS国标GB28181-2022平台有哪些具体加密措施?
    在当今信息化高速发展的时代,视频监控已经成为公共安全、城市管理、企业安防等领域不可或缺的一部分。然而,由于不同厂家生产的视频监控设备执行各自的标准,导致设备间无法互通、难以统一管理,这为安防系统的建设带来了极大的挑战。在此基础上,国标GB28181公网平台LiteGBS应运而生,成为......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现九
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......