MySQL数据库中加密数据的通配符搜索


Wildcard searching of encrypted data in a MySQL database?

我正在构建一个小型web应用程序,该应用程序将为每个插入的人保留大约10条信息。由于数据保护,大部分信息必须加密。

使用CodeIgniter框架和CodeIgniter加密类,我可以在将信息存储到数据库之前在应用程序端对其进行编码。CodeIgniter加密类使用PHP的mcrypt函数和AES_256密码。

我遇到的问题是,我需要允许应用程序的用户使用通配符搜索来搜索存储的信息,也可能在以后的日期通过API。

任何人遇到类似问题的解决方案。我读过MySQL的AES_ENCRYPT和AES_DECRYPT,但它们仍然需要以明文形式来回传递密钥,我不愿意这样做。

我目前的结论是,如果我希望继续这条路线,那么每次进行搜索时,全表解密是我唯一的解决方案(显然不是很好)。

嗯,如果不先解码,你就不能在解密的文本中搜索,这是真的。

然而,这并不意味着没有办法解决这个问题。例如,可以对数据进行反向索引,并对用于搜索的键进行散列(sha1、md5、crc32,任选一个)。然后你所要做的就是对你正在使用的搜索词进行散列,在索引中查找它们并检索任何匹配的记录,这只会是表的一小部分,而不是整个表。

通过散列数据(使用盐!),可以避免以不安全的方式存储数据,同时仍然可以搜索数据,因为您为数据创建了索引。在确定哪些文档匹配之前不需要解密。