代码之家  ›  专栏  ›  技术社区  ›  LettersBa

我是否以正确的方式集成SQL密码?

  •  0
  • LettersBa  · 技术社区  · 10 年前

    之前我使用了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密码。

    我用下面描述的方式在代码中实现了它 link ,而我唯一需要做的就是使用该代码(我之前说过),然后在 sqlite3_打开 :

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

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

    ¨代码>o$;i] d=4美元?[avi%.sc U]GecB3nY“ ?w·f±盎司Ct°f0] Sw?=HBN±H.na?O(B;

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

    1 回复  |  直到 10 年前
        1
  •  3
  •   Nick Parker    10 年前

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