淘宝内部卷怎么做网站,十种网络营销的方法,水土保持与生态建设网站,渭南公司做网站文章目录 前言沙雕方案内存加载解密密文映射表 常规做法实现数据库加密算法参考 分词组合加密#xff08;推荐#xff09; 超神方案总结个人简介 前言
在数据安全性和查询效率之间找到平衡是许多数据管理系统所面临的挑战之一。特别是在涉及加密数据的情况下#xff0c;如何… 文章目录 前言沙雕方案内存加载解密密文映射表 常规做法实现数据库加密算法参考 分词组合加密推荐 超神方案总结个人简介 前言
在数据安全性和查询效率之间找到平衡是许多数据管理系统所面临的挑战之一。特别是在涉及加密数据的情况下如何进行模糊查询变得更加复杂。在本文中我们将探讨三种不同进阶方法沙雕、常规和超神做法。
沙雕方案
内存加载解密
将所有数据加载到内存中进行解密然后通过程序算法来模糊匹配。这种做法效率低下且不安全因为涉及将所有数据加载到内存中存在内存溢出和数据泄露的风险。一个英文字母(不分大小写)占一个字节的空间一个中文汉字占两个字节的空间用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?treeId1articleId106213docType1#s1淘宝密文字段检索方案https://open.taobao.com/docV3.htm?docId106213docType1
超神方案
除上面提到的方案之外我们还可以从算法层面设计一种加密算法来支持直接进行模糊匹配但是整体设计难度、成本都过于复杂一般实践中基本不会考虑这种方案。下面是一些参考资料有兴趣的朋友可以看一下支持快速查询的数据库如何加密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编程。 我鼓励互动和建立社区因此请留下你的问题、建议或主题请求让我知道你感兴趣的内容。此外我将分享最新的互联网和技术资讯以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进一起探讨技术世界的无限可能性。 保持关注我的博客让我们共同追求技术卓越。