【问题标题】:Wildcard searching of encrypted data in a MySQL database?MySQL数据库中加密数据的通配符搜索?
【发布时间】:2012-12-18 18:40:35
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php mysql security encryption encode


    【解决方案1】:

    好吧,如果不先解码就无法在解密的文本中进行搜索,这是真的。

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

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

    【讨论】:

    • +1 横向思考,使用散列保证敏感关键词依然保持敏感
    • 您好,感谢您的回复,我想我理解您的建议,但是在尝试进行“where_in”或“like”搜索时,索引仍然不会不足,例如:search %CHR % 将返回包含单词 CHRIS 的记录。可能我读错了,如果可以的话,请您详细说明一下。
    • 正确,通配符搜索并不真正适用于倒排索引,但适用于正常搜索。进行通配符搜索的唯一方法是解密整个内容。
    猜你喜欢
    • 2021-01-14
    • 2012-07-25
    • 2021-06-29
    • 2016-02-28
    • 1970-01-01
    • 2011-05-20
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多