我正在开发一个web应用程序,其中客户的敏感数据如姓名、道布等需要加密并存储在数据库中。
为此,我在java中使用crypto加密来加密给定的文本,并将加密后的值存储在数据库中。
下面是加密文本的一段代码
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数据库中实现此目的的最佳方法
发布于 2021-01-08 20:31:17
这更多的是一个评论而不是一个答案,但作为一个新成员,我只能发布答案。
对加密数据进行计算与所谓的“同态加密”有关。这是一个研究课题,但目前正在行业中实施。我找到了这篇论文,它似乎以一种安全的方式解决了你的问题:https://eprint.iacr.org/2020/931.pdf
发布于 2021-01-14 05:05:46
经验法则是..。如果你想索引信息,你不需要加密它。
根据数据库的最终大小,性能可能会受到影响。对于解密、检查、处理工作流,100行是可行的;但是对于跨越10000000行的东西...您最好找到更聪明的方法来使用模拟数据库索引方案的附加表。
例如,在加密将要存储在数据库中的信息之前,发出另一个查询,该查询将用户的db添加到旨在根据道布子集对用户进行分类的表中。就像90年代、80年代出生的人一样...类似的东西可以应用于他们家族名字的第一个字母...等。
这样,从技术上讲,您可以确保他们的信息安全,并且可以节省一些性能方面的时间,同时不必处理解密。
一定要记住,根据这些信息的价值,以及你在撒谎时留下了多少“线索”,有人可以从技术上找出解密你的东西的方法。
因此,不要在名为PPL_BORN_IN_THE_90S、PPL_MALES、PPL_NAMED_JOHN等的清晰定义的表中显示相同的ID。
https://stackoverflow.com/questions/65584891
复制相似问题