首页 > 解决方案 > 在 SQLite 中查询加密数据

问题描述

我想从我的 SQLite 数据库中查询加密数据。

对于每一行,我对每个值使用 XOR 操作,将其转换为 Base64,然后将其插入数据库中。

现在我需要找到一种方法来选择加密值。

IE:

SELECT *
FROM table
WHERE name_column BETWEEN 'value1' AND 'value2'

考虑到我的数据库中的大量信息,我怎样才能做到这一点而不必解密所有表以获取所需的行?

标签: qtencryptionsqlitehashmap

解决方案


不可能。您正在使用BETWEEN 'value1' AND 'value2'. 数据库只能看到 XORed 字符串,BETWEEN无法按预期工作。即使您找到了一种使用 SQLITE 即时解密字符串的方法(记住再次调用 XOR 将解密),当有数千个条目时,它也不是很有效且资源消耗。

因此,为了继续解决您的问题,您可以查看扩展列表。SQLITE 似乎提供了一些非常基本的加密模块,它们可以用您定义的密钥对整个数据库进行异或。(不建议)

该文件描述了 SQLite 的 SQLite 加密扩展 (SEE)。SEE 允许 SQLite 读取和写入加密的数据库文件。所有数据库内容(包括元数据)都经过加密,因此对于外部观察者来说,数据库似乎是白噪声。

此文件包含执行弱 XOR 加密的 SEE 变体的完整源代码。不要认真对待这个文件。它仅用于演示目的。XOR 加密非常弱,几乎不能称为“加密”。

您想要这样做的方式将不起作用,除非您将列的所有值读取到 Qt 程序,解密它们并检查 VALUE X 是否在 A 和 B 之间。


推荐阅读