从文档上看,似乎不可能实现,但我想确认一下。这是我的用例:
我想要一个加密的数据库。它只能在内存中解密(程序运行时)。我唯一能想到的方法是在将文件交给SQLite之前从磁盘解密文件。但我找不到任何方法来给SQLite一个指针并说:“这是一个数据库。”也找不到一种序列化内存数据库然后在写入磁盘之前对其进行加密的方法。我假设sqlite3_backup API需要一个未加密的数据库文件?
我正在Android上运行,所以我想使用内置的SQLite,我认为不可能安装SQLite Encryption Extension (SEE)。(在Android上运行也意味着我没有完全访问C++ API,但我们暂且忽略这一点)。
我想要一个加密的数据库。它只能在内存中解密(程序运行时)。我唯一能想到的方法是在将文件交给SQLite之前从磁盘解密文件。但我找不到任何方法来给SQLite一个指针并说:“这是一个数据库。”也找不到一种序列化内存数据库然后在写入磁盘之前对其进行加密的方法。我假设sqlite3_backup API需要一个未加密的数据库文件?
我正在Android上运行,所以我想使用内置的SQLite,我认为不可能安装SQLite Encryption Extension (SEE)。(在Android上运行也意味着我没有完全访问C++ API,但我们暂且忽略这一点)。
sqlite_vfs_find
获取默认实现。然后,您可以使用相同的函数指针来调用您不需要更改的方法(除了xOpen和可能的xDelete - 魔法发生在您设置为sqlite3_file
中的sqlite3_io_methods
中),并且您可以从其余部分中调用默认接口中的指针。但是,首先看一下SEE是否使用了该API(我没有它的源代码,所以无法确定),因为它可能正在使用,并且如果它正在使用,则应该可以正常工作。 - Jan Hudec