2011-04-29 76 views
0

我不明白編譯錯誤,但我的數據庫不加密...SqlCipher不加密

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; 
} 

但仍然沒有成功。誰能幫忙?

回答

1

最有可能的問題是,你是不是你的鏈接對SQLCipher靜態庫項目。因此,您的項目使用的默認系統SQLite的框架。

走進你的項目構建設置 - >構建階段 - >鏈接二進制庫,並確保libsqlcipher.a和libcrypto.a都列出。如果沒有,添加它們。然後清理項目和重建。

相關問題