【问题标题】:Querying encrypted data in SQLite在 SQLite 中查询加密数据
【发布时间】:2018-05-12 02:34:18
【问题描述】:
我想从我的 SQLite 数据库中查询加密数据。
对于每一行,我对每个值使用异或运算,将其转换为Base64,然后将其插入数据库中。
现在我需要找到一种方法来选择加密值。
即:
SELECT *
FROM table
WHERE name_column BETWEEN 'value1' AND 'value2'
考虑到我的数据库中的大量信息,我怎样才能做到这一点,而不必解密所有表以获取所需的行?
【问题讨论】:
标签:
qt
encryption
sqlite
hashmap
【解决方案1】:
这是不可能的。您正在使用BETWEEN 'value1' AND 'value2'。数据库只能看到 XORed 字符串,BETWEEN 将无法按预期工作。即使您找到了一种使用 SQLITE 即时解密字符串的方法(记住再次调用 XOR 将解密),当有数千个条目时,它也不是很有效并且会消耗资源。
因此,为了继续解决您的问题,您可以查看this 扩展名列表。 SQLITE 似乎提供了一些非常基本的加密模块,可以用您定义的密钥对整个数据库进行异或。 (不推荐)
此文件描述了 SQLite 的 SQLite 加密扩展 (SEE)。
SEE 允许 SQLite 读取和写入加密的数据库文件。全部
包括元数据在内的数据库内容被加密,以便
外部观察者数据库似乎是白噪声。
此文件包含 SEE 变体的完整源代码
进行弱异或加密。不要认真对待这个文件。那是为了
仅用于演示目的。 XOR 加密太弱了
符合“加密”的条件。
你想这样做的方式是行不通的,除非你将一列的所有值读入你的 Qt 程序,解密它们并检查 VALUE X 是否在 A 和 B 之间。