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

数据库加密数据模糊匹配查询技术方案

文章目录

  • 前言
  • 沙雕方案
    • 内存加载解密
    • 密文映射表
  • 常规做法
    • 实现数据库加密算法
      • 参考
    • 分词组合加密(推荐)
  • 超神方案
  • 总结
  • 个人简介

前言

  • 在数据安全性和查询效率之间找到平衡是许多数据管理系统所面临的挑战之一。特别是在涉及加密数据的情况下,如何进行模糊查询变得更加复杂。在本文中,我们将探讨三种不同进阶方法:沙雕、常规和超神做法。

沙雕方案

内存加载解密

  • 将所有数据加载到内存中进行解密,然后通过程序算法来模糊匹配。这种做法效率低下,且不安全,因为涉及将所有数据加载到内存中,存在内存溢出和数据泄露的风险。
  • 一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间,用DES来举例,13800138000 加密后的串 HE9T75xNx6c5yLmS5l4r6Q== 占24个字节:

密文映射表

  • 将密文数据映射一份明文映射表,然后通过模糊查询明文映射表来关联密文数据。这种方法会暴露明文映射表,导致数据安全性降低。
  • 我们本质是为了数据安全才进行加密,这种方案属实是掩耳盗铃,多此一举。

常规做法

实现数据库加密算法

  • 在数据库底层实现数据加解密算法,在模糊查询的时候使用 decode(key) like '%partial% 进行查询。
  • 本方案看着不错,但是存在一个很大的问题,就是通用性不强,在使用多种类型数据库时,函数需要重新定义,且使用的方式也不一定兼容,可拓展性、可移植性较差。

参考

  • MySQL 自定义函数:https://zhuanlan.zhihu.com/p/128744140

分词组合加密(推荐)

  • 对密文数据进行分词组合,然后将分词组合的结果集分别进行加密,存储到扩展列中。查询时通过解密函数进行模糊匹配。这种方法在保证数据安全性的同时,也保证了查询的效率。
  • 但是我们都知道数据加密后长度会变长,出于成本、性能、安全的考虑,模糊查询的子句一般限制为:子句长度必须大于等于4个英文/数字,或者2个汉字
  • 比如国内很多互联网大厂都是使用类似的方案:
  • 阿里密文字段检索方案:https://jaq-doc.alibaba.com/docs/doc.htm?treeId=1&articleId=106213&docType=1#s1
  • 淘宝密文字段检索方案:https://open.taobao.com/docV3.htm?docId=106213&docType=1

超神方案

  • 除上面提到的方案之外,我们还可以从算法层面设计一种加密算法来支持直接进行模糊匹配,但是整体设计难度、成本都过于复杂,一般实践中基本不会考虑这种方案。
  • 下面是一些参考资料,有兴趣的朋友可以看一下:
  • 支持快速查询的数据库如何加密:https://www.jiamisoft.com/blog/5961-kuaisuchaxunshujukujiami.html
  • 基于Lucene的云端搜索与密文基础上的模糊查询:https://www.cnblogs.com/arthurqin/p/6307153.html

总结

  • 通过本文的介绍和示例,我们可以更好地理解不同方法在加密数据的模糊查询中的应用和实现方式。选择合适的方法取决于数据安全性、查询效率和实现难度等因素的综合考量。

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。

http://www.lryc.cn/news/344453.html

相关文章:

  • jsSPA应用如何实现动态内容更新
  • C++学习笔记——仿函数
  • python 中如何匹配字符串
  • Windows 系统运维常用命令
  • Springboot监听ConfigMap配置文件自动更新配置
  • API安全机制
  • 接口性能测试 —— Jmeter并发与持续性压测!
  • Windows+Linux的虚拟串口工具
  • Spring-AOP
  • 算法程序设计-快速排序
  • Jmeter用jdbc实现对数据库的操作
  • Mac 上安装多版本的 JDK 且实现 自由切换
  • springboot如何发送邮件,java如何发送邮件随机码作为验证
  • 使用QLoRA在自定义数据集上finetuning 大模型 LLAMA3 的数据比对分析
  • 编译和链接(超详细)
  • Rust Turbofish 的由来
  • 2.外卖点餐系统(Java项目 springboot)
  • Universal Thresholdizer:将多种密码学原语门限化
  • 【UE5学习笔记】编辑及运行界面:关闭眼部识别(自动曝光)
  • 未来科技的前沿:深入探讨人工智能的进展、机器学习技术和未来趋势
  • 3-qt综合实例-贪吃蛇的游戏程序
  • QGraphicsView实现简易地图12『平移与偏移』
  • 深入探索 Vue 中的 createVNode 与 resolveComponent
  • 【记录42】centos 7.6安装nginx教程详细教程
  • C语言程序设计(不熟悉的点)
  • DAO是什么?有什么用途?
  • Socket学习记录
  • 黑马 - websocket搭建在线聊天室
  • 【每日力扣】543. 二叉树的直径与101. 对称二叉树
  • 【linux】——日志分析