查询说明:假设我有一个数据库表,它以加密形式存储所有用户的数据。我有一个功能,管理员可以搜索用户数据。现在的问题是,管理员将在文本框中输入普通文本,我必须根据管理员的输入过滤用户列表(在每次文本更改时)。同时,我有一堆加密形式的数据,我必须根据管理员输入的普通文本对其进行过滤。
到目前为止我提出的解决办法是,我首先解密所有数据,然后应用过滤器。但我很想知道,如果我的数据库中有数百万条记录,那么当前的方式似乎毫无用处且效率低下。
有人可以帮我以最有效的方式搜索加密数据吗?
任何帮助将不胜感激!
感谢。
答案 0 :(得分:1)
到目前为止我提出的解决办法是,我首先解密所有数据,然后应用过滤器。但我很想知道,如果我的数据库中有数百万条记录,那么当前的方式似乎毫无用处且效率低下。
您已经确定这不是可扩展的解决方案。如果您想深入了解此问题,请参阅:Building Searchable Encrypted Databases with PHP and SQL 。
您想要做的是:
HMAC-SHA256(plaintext, separate_key)
sodium_crypto_pwhash()
或hash_pbkdf2()
代替。这为您提供了两全其美的优势:数据加密可抵御被动和主动攻击,但也允许在快速SELECT查询中使用。
更新(2019-03-27):不要自行构建,请查看实现此设计的CipherSweet。