我是以正确的方式集成SQL Cipher吗?

时间:2015-03-11 14:35:14

标签: ios objective-c sqlite sqlcipher

以前我使用过Xcode附带的SQLite3库,可以在下面找到创建数据库的代码:

NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docsDir = dirPaths[0];

    databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"databases/database.sqlite"]];
    NSLog(@"DB Path: %@", databasePath);

    NSFileManager *filemgr = [NSFileManager defaultManager];

    if ([filemgr fileExistsAtPath: databasePath ] == NO) {
        const char *dbpath = [databasePath UTF8String];
        if (sqlite3_open(dbpath, &myDatabase) == SQLITE_OK) {

            char *errMsg;

             const char *sql_data = "CREATE TABLE IF NOT EXISTS myTableName.....";

            if (sqlite3_exec(myDatabase, sql_data, NULL, NULL, &errMsg) == SQLITE_OK) {

                NSLog(@"Database OK");

                [self setDatabase];

            } else {
                NSLog(@"Data Base Fail");
            }

            sqlite3_close(myDatabase);

        } else {

            NSLog(@"Database fail");

        }
    }

最近我需要加密数据库文件,并在互联网上进行简短搜索,我发现有些网站建议使用SQL Cipher。

我在我的代码中以这个link中描述的方式实现了它,我唯一要做的就是保持代码(我之前说过),然后使用这两个命令 sqlite3_open

const char* keyTB = [@"MySecretPassword" UTF8String];
sqlite3_key(myDatabase, keyTB, (int)strlen(keyTB));

要检查我的数据库是否已加密,请使用文本编辑器打开它,我看到了:

  

øøèDEÆ?&gt; o> $™; /iìÚÄ'†í]¥d =Óä\Êź$4áÓÈ?ïÒ[ÅaÚvÁƒ•i%í≈ª¢。£s◊Âc®Øì≈àÜU - } Gec <≥'B∂¡¸¸Æ™√3Ìnú»弥荣“SS   ¬?吴÷fñoÂ≈ÛͯzÏâ/˛Ct°˘ΩfìÙº0音响]   ,ŸSw∂â≤≥'= H€BN±HÇûß...Σº.náaߨO¬¢(B <óμ¬;º

SQL Cipher是否真的加密了我的数据库(256位AES加密)?或者需要在我的代码中进行一些配置?

1 个答案:

答案 0 :(得分:3)

建议您不要直接将密码嵌入数据库,但这并不是SQLCipher工作的严格要求。将SQLCipher集成到应用程序中后,只需在打开连接后使用sqlite3_key键入数据库即可。要验证加密数据库的状态,通常会在数据库文件本身上运行hexdump -C,内容应该看起来难以辨认。