首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以在MySQL和Java中对加密列执行通配符搜索吗

我们可以在MySQL和Java中对加密列执行通配符搜索吗
EN

Stack Overflow用户
提问于 2021-01-06 02:55:08
回答 2查看 330关注 0票数 2

我正在开发一个web应用程序,其中客户的敏感数据如姓名、道布等需要加密并存储在数据库中。

为此,我在java中使用crypto加密来加密给定的文本,并将加密后的值存储在数据库中。

下面是加密文本的一段代码

代码语言:javascript
复制
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;

String key = "";// key to encrypt/decrypt    
String customerName = "customer name";

Key aesKey = generateMySQLAESKey(key,"UTF-8");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encrypted = cipher.doFinal(customerName.getBytes("UTF-8"));
String encrtedName = new String(Hex.encodeHex(encrypted));
// storing this encrtedName as varchar in database

精确搜索是通过在从数据库查询数据时在where子句中传递加密值来完成的

但是我们如何在加密列上执行通配符搜索呢?

我刚接触密码学和加密方法。请让我知道在Java或Mysql数据库中实现此目的的最佳方法

EN

回答 2

Stack Overflow用户

发布于 2021-01-08 20:31:17

这更多的是一个评论而不是一个答案,但作为一个新成员,我只能发布答案。

对加密数据进行计算与所谓的“同态加密”有关。这是一个研究课题,但目前正在行业中实施。我找到了这篇论文,它似乎以一种安全的方式解决了你的问题:https://eprint.iacr.org/2020/931.pdf

票数 3
EN

Stack Overflow用户

发布于 2021-01-14 05:05:46

经验法则是..。如果你想索引信息,你不需要加密它。

根据数据库的最终大小,性能可能会受到影响。对于解密、检查、处理工作流,100行是可行的;但是对于跨越10000000行的东西...您最好找到更聪明的方法来使用模拟数据库索引方案的附加表。

例如,在加密将要存储在数据库中的信息之前,发出另一个查询,该查询将用户的db添加到旨在根据道布子集对用户进行分类的表中。就像90年代、80年代出生的人一样...类似的东西可以应用于他们家族名字的第一个字母...等。

这样,从技术上讲,您可以确保他们的信息安全,并且可以节省一些性能方面的时间,同时不必处理解密。

一定要记住,根据这些信息的价值,以及你在撒谎时留下了多少“线索”,有人可以从技术上找出解密你的东西的方法。

因此,不要在名为PPL_BORN_IN_THE_90S、PPL_MALES、PPL_NAMED_JOHN等的清晰定义的表中显示相同的ID。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65584891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档