7

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

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

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

任何机构都会遇到类似问题的解决方案。我已经阅读了有关 MySQL AES_ENCRYPT 和 AES_DECRYPT 的信息,但它们仍然需要以纯文本来回传递密钥,而我不愿意这样做。

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

4

1 回答 1

6

好吧,你不能在没有先解码的情况下搜索解密的文本,这是真的。

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

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

于 2013-01-04T10:27:50.663 回答