我没有收到编译错误,但我的数据库没有加密......
const char* key = [@"BIGSecret" UTF8String];
int err = sqlite3_key(database, key, strlen(key));
if (sqlite3_exec(database, (const char*) "SELECT count(*) FROM animals;", NULL, NULL, NULL) == SQLITE_OK) {
// database has been initialized
}
我指的是网站http://sqlcipher.net/documentation/ios,并使用已包含AnimalDatabase.sql数据库的SQLiteTutorial示例。
我也知道加密在现有数据库上不起作用,所以我尝试了以下代码:
- (void)encryptDB
{
NSLog (@"Start");
sqlite3 *DB = [self getNewDBConnection];
sqlite3_exec(DB, "ATTACH DATABASE AnimalDatabase.sql AS encrypted KEY 1234;", NULL, NULL, NULL);
sqlite3_exec(DB, "CREATE TABLE encrypted.Account(id,Name,Desc,Image);", NULL, NULL, NULL);
sqlite3_exec(DB, "INSERT INTO encrypted.Account SELECT * FROM animals;", NULL, NULL, NULL);
sqlite3_exec(DB, "DETACH DATABASE encrypted;", NULL, NULL, NULL);
NSLog (@"End");
}
- (sqlite3 *)getNewDBConnection{
if (sqlite3_open([databasePath UTF8String], &newDBconnection) == SQLITE_OK) { // opening AnimalDatabase.sql
NSLog(@"Database Successfully Opened :)");
} else {
NSLog(@"Error in opening database :(");
}
return newDBconnection;
}
但仍然没有成功。有人可以帮忙吗?
答案 0 :(得分:1)
最可能的问题是您没有将项目与SQLCipher静态库链接。因此,您的项目正在使用默认的系统SQLite框架。
进入您的项目构建设置 - >构建阶段 - >链接二进制库并确保libsqlcipher.a和libcrypto.a都列在那里。如果没有,请添加它们。然后清理项目和重建。