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

时间:2013-01-04 10:21:33

标签: php mysql security encryption encode

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

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

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

任何机构都遇到类似问题的解决方案。我已经阅读了关于MySQL AES_ENCRYPT和AES_DECRYPT的内容,但是他们仍然需要在纯文本中来回传递密钥,我不愿意这样做。

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

1 个答案:

答案 0 :(得分:6)

好吧,如果不先解码就不能搜索解密文本,这是真的。

然而,这并不意味着没有办法解决这个问题。例如,您可以生成inverted index数据并使用哈希值(sha1,md5,crc32,选择一个)进行搜索。所有你需要做的就是散列你正在使用的搜索词,在索引中查找它们并检索匹配的任何记录,这只是表格的一小部分而不是整个事物。

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