SQLCipher在iOS 10上停止工作。

3

我在我的iOS项目中使用Sqlite(sqlcipher)作为数据库。在iOS 9中,所有的东西都运行良好。现在我升级了新版Xcode。但是数据库加密现在不起作用了。

sqlite3 *db1;
    if (sqlite3_open([[self.databaseURL path] UTF8String], &db1) == SQLITE_OK) {
        const char* key = [g_sqlite_key UTF8String];
        AZLog(@"%s",key);
        sqlite3_key(db1, key, (int)strlen(key));
        if (sqlite3_exec(db1, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
            AZLog(@"Password is correct, or a new database has been initialized");
        } else {
            AZLog(@"Incorrect password!");
        }
        sqlite3_close(db1);
    }

有人能帮助我吗?

提前感谢。


你说的“不工作”是什么意思?能否解释一下出了什么问题? - Sachin Vas
1
现在使用上述方法加密了数据库,但如果我尝试对数据库执行写操作,则会出现错误“文件已加密或不是数据库”。 - Nirav Patel
你有检查下面的答案吗? - Sachin Vas
2个回答

2

在使用sqlcipher加密数据库时,您需要提供readwrite和open-create权限。

sqlite3 *db1;
    if (sqlite3_open_v2([[self.databaseURL path] UTF8String], &db1, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL) == SQLITE_OK) {
        const char* key = [g_sqlite_key UTF8String];
        AZLog(@"%s",key);
        sqlite3_key(db1, key, (int)strlen(key));
        if (sqlite3_exec(db1, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
            AZLog(@"Password is correct, or a new database has been initialized");
        } else {
            AZLog(@"Incorrect password!");
        }
        sqlite3_close(db1);
    }

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接