我目前正在为 iPhone 开发一个简单的帐户管理应用程序。我正在使用 sqlcipher 加密和解密数据库。
目前,我在应用程序包中有一个未加密的数据库,我想将其复制到 iPhone 文档目录然后对其进行加密,或者在将其复制到文档目录之前对其进行加密。
我面临的问题是,无论我做什么,我似乎都得到了一个未加密的数据库,无论我尝试使用哪种加密方法,无论是“ATTACH”数据库方法还是“key()/rekey” ()“ 方法。
我尝试在终端中使用“ATTACH”数据库方法,但结果是一个未加密的数据库。我尝试以编程方式使用“key()/rekey()”方法,如下所示:
sqlite3 *db;
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"KeyCrypt.sqlite"];
if (sqlite3_open([defaultDBPath UTF8String],&db)==SQLITE_OK) {
NSLog (@"Running keying.");
sqlite3_key(db, "1234", 4);
if (sqlite3_exec(db, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
// password is correct, or, database has been initialized
NSLog (@"This has occured correctly?");
}
else
{
// incorrect password!
NSLog (@"This has occured incorrectly?");
}
}
我在某处做错了吗?我已经尝试了一整天的在线研究,但无法找到解决为什么我的数据库在运行之前或运行期间没有加密的解决方案:(
如果您需要任何额外的信息,我愿意提供给您,请帮助学生!
谢谢你!
编辑:
用于键入我的数据库的方法摘录。
//Initializing the sqlite3_key function.
int sqlite3_key(sqlite3 *db, const void *pKey, int nKey);
sqlite3_key(db, "1234", 4);
显然我没有初始化 sqlite3_key -_-"。此外,即使文件被加密,检查仍然显示发生错误并且数据库未成功打开。
关于数据库的打开,我打开数据库的每个实例都必须运行 sqlite3_key 对吗?在那个实例中,我可以正常访问数据库吗?
谢谢大家的帮助。