【问题标题】:SqlCipher does not encryptSqlCipher 不加密
【发布时间】:2011-04-29 11:15:13
【问题描述】:

我没有收到编译错误,但我的数据库没有加密...

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 并使用SQLiteTutorial 示例,其中已经包含AnimalDatabase.sql 数据库。

我也知道加密无法在现有数据库上工作,所以我尝试了以下代码:

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

但仍然没有成功。有人可以帮忙吗?

【问题讨论】:

    标签: iphone sqlcipher


    【解决方案1】:

    最可能的问题是您没有将项目链接到 SQLCipher 静态库。因此,您的项目正在使用默认的系统 SQLite 框架。

    进入您的项目构建设置 -> 构建阶段 -> 与二进制库链接并确保 libsqlcipher.a 和 libcrypto.a 都列在此处。如果没有,请添加它们。然后清理项目并重建。

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多