当前位置: 首页 > news >正文

MySQL字段内容加解密使用性能验证

背景:       

        近期工作中遇到对MySQL表中内容安全要求,需要通过字段内容加密存储的方式来实现。

        为真实测试,如有疑问,欢迎解惑。

        有多种解决办法,可以通过中间件来实现、数据库层来实现,最终选择了AES对称加密的方式:Java加密数据进行保存,MySQL中解密进行范围查询的方式。

        环境:MySQL 8.3版本

        连接工具:DBeaver 22.3

        测试方式:insert语句一个个新增;几个数据量节点进行单条新增、等于查询、大于小于范围查询

        准备工作:

-- 建表语句
CREATE TABLE test_encryption (
    id INT PRIMARY KEY,
    data1 VARCHAR(255),
    data2 VARCHAR(255)
);


-- 新增数据
INSERT INTO test_encryption (id,data) VALUES (1, AES_ENCRYPT('num000001', 'your_secret_key'),AES_ENCRYPT('code000001', 'your_secret_key'));
INSERT INTO test_encryption (id,data) VALUES (1, AES_ENCRYPT('num000002', 'your_secret_key'),AES_ENCRYPT('code000002', 'your_secret_key'));
....
INSERT INTO test_encryption (id,data) VALUES (1, AES_ENCRYPT('num400001', 'your_secret_key'),AES_ENCRYPT('code400001', 'your_secret_key'));


-- 查询单条语句
select * from test_encryption where AES_DECRYPT(data1, 'your_secret_key') = 'num000022' and AES_DECRYPT(data2, 'your_secret_key') = 'code000022'


-- 范围查询语句(大于号、小于号)
select * from test_encryption where 
AES_DECRYPT(data1, 'your_secret_key') > 'num000022' and 
AES_DECRYPT(data1, 'your_secret_key') < 'num020022' and 
AES_DECRYPT(data2, 'your_secret_key') > 'code000022' and 
AES_DECRYPT(data2, 'your_secret_key') < 'code020022'

        共新增40w条数据,中间有部分时间DBeaver工具崩了,导致虽然新增但是无法查看具体时间,所以中间有17.3w~20w和34.6w~40w的新增数据过程。  

        “加密新增全部速度”:前面数据量一列展示的从多少数据到多少数据新增的时间;

        “加密新增一条速度”:到达“数据量”一栏对应的最高值时单独新增一条数据的用时;

        “解密查询一条数据速度”:到达“数据量”一栏对应的最高值时等于查询的速度;

        “解密范围查速度”:到达“数据量”一栏对应的最高值时使用范围查询的速度;

      测试结果如下:

数据量

加密新增全部速度(ms)

加密新增一条速度(ms)

解密查询一条数据速度(ms)

解密范围查速度(ms)

0~2w

58600

3~4

31~41

31~41

2w~3w

29713

3~4

42~52

31~41

3w~10w

216508

3~4

111~145

31~41

17.3w~20w

79599

3~4

225~245

45~56

34.6w~40w

160911

4

445~465

90~105

        我对结果有些疑惑,是因为我范围查限制的条件问题?还是mysql对加密函数的范围查有优化?总感觉查询一条应该比查询范围效率应该会高。

相关文章:

  • Linux学习记录1
  • Manus AI Agent介绍总结
  • js正则表达式--标识符(6)
  • 浏览器WEB播放RTSP
  • 键值对(C++实现)
  • 鸿蒙应用开发深度解析:API 14核心特性与实战指南
  • C++ Primer Plus 编程练习题 第三章 处理数据
  • 某得物 - WebView App H5调试
  • dataframe能否把列表里所有的NaN换成列表上一位的数字?
  • 蓝桥杯备考:动态规划路径类dp之迷雾森林
  • ubuntu 20.04下ZEDmini安装使用
  • 【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JSP 中的内置对象:request、response、session 的使用示例
  • C++11新特性:auto遇上const时的推导规则
  • blender看不到导入的模型
  • YOLOv12本地部署教程——42%速度提升,让高效目标检测触手可及
  • 要查看 SQLite 数据库中的所有表,可以通过查询 SQLite 的系统表 sqlite_master
  • 从0到1搭建315答题抽奖小程序:技术踩坑与运营真相
  • 【Vue CLI脚手架开发】——6.scoped样式
  • javascript字符串截取有哪些
  • RabbitMQ知识点
  • 安卓从网站获取视频怎么做/临沂百度公司地址
  • 南宫做网站/百度收录规则
  • 教做游戏的网站/1688的网站特色
  • 网站支付开发/购买友情链接
  • 外贸网站源码怎么建/武汉网络推广网络营销
  • 怎么用linux做网站服务器/产品销售推广方案