ios - 我是否以正确的方式集成了 SQL Cipher?

标签 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Æ?>o›$™;⁄iìÚÄ’†í]¥d=ˇÓä\Êź$4áÓÈ?ïÒ[ÅaÚvÁƒ•i%í≈ª¢.£s◊Âc®Øì≈ àÜU—–}Gec‹≥’B∂¡¸¸Æ™√3Ìnú»YÆ"ß ¬?wÚ÷fñoÂ≈ÛͯzÏâ⁄˛Ct°˘ΩfìÙº0ˇfi] ‚ŸSw∂â≤≥‘=�H€BN±HÇûß…∑º.náaߨO¬ˇ¢(B¨‹óµ¬;º‹ÀÒ

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

最佳答案

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

关于ios - 我是否以正确的方式集成了 SQL Cipher?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28989452/

相关文章:

ios - 已经在过渡时试图关闭演示 Controller

ios - 签署 iOS 应用程序 : App ID Cannot be Registered to Your Development Team

ios - 具有行/列高亮显示的二维表格

objective-c - Objective C 中属性必须声明为实例变量吗?

ios - 如何增加和减少 TableViewCell 中自定义单元格的高度

java - 将 SQLite 数据库中的字符串转换为日期/时间或 Android 中的 double 图表引擎图

python - SQLITE3 不创建数据库

ios - 检查 NSDate 对象是否在过去

objective-c - myView.frame.origin.x = 值;不起作用 - 但为什么呢?

android - 从电池性能影响的角度来看,SQLite 数据库与基于文件的数据存储