Question

J'ai essayé de crypter / décrypter une base de données SQLite dans mon projet iPhone. Je suis en mesure de chiffrer la base de données en utilisant la méthode de recodage. Mais je suis incapable de le déchiffrer. J'ai gardé mon dossier sqlite.db dans un dossier. en train d'essayer sur un simulateur.

Extrait de code:

[[SQLiteDB sharedSQLiteDB] open:<path to the folder> withKey:@""];

[[SQLiteDB sharedSQLiteDB] reKey:@"abc"];

[[SQLiteDB sharedSQLiteDB] close];

[[SQLiteDB sharedSQLiteDB] open:<path to the folder> withKey:@"abc"];

[[SQLiteDB sharedSQLiteDB] reKey:@""];

.....

- (BOOL)open:(NSString *)path withKey:(NSString *)masterKey {

    if (sqlite3_open([path fileSystemRepresentation], &_db) != SQLITE_OK) {
        NSLog(@"SQLite Opening Error: %s", sqlite3_errmsg(_db));
        return NO;
    }

    if(masterKey)
        sqlite3_exec(_db, [[NSString stringWithFormat:@"PRAGMA key = '%@'", masterKey] UTF8String], NULL, NULL, NULL);

    if (sqlite3_exec(_db, (const char*) "SELECT count(*) FROM sqlite_master", NULL, NULL, NULL) != SQLITE_OK)
    {
        [self close];
        NSLog(@"SQLite Key Error!");
        return NO;
    }

    filePath = [path retain];
    return YES;
}

......

- (void)reKey:(NSString *)masterKey
{
    sqlite3_exec(_db, [[NSString stringWithFormat:@"PRAGMA rekey = '%@'", masterKey] UTF8String], NULL, NULL, NULL);

}

J'ai lu les messages sur ce sujet dans les groupes Google sqlcipher, mais je suis incapable de le déchiffrer. Toute aide serait très appréciée.

Était-ce utile?

La solution

de la liste Reposant postale:

Si vous essayez de prendre une base de données non cryptée existante, chiffrer, puis le déchiffrer en arrière, notre approche recommandée est de ne pas utiliser rekey, mais au lieu d'utiliser des bases de données ci-joints pour copier des données entre une norme et une base de données sqlcipher . Il y a plus d'informations et un exemple concret ici:

http://www.zetetic.net/blog/2009/12/29/how-to-encrypt-a-plaintext-sqlite-database-to-use-sqlcipher/

Si au contraire, vous essayez juste d'utiliser sqlcipher pour chiffrer les données en général (à savoir sans conversion à partir d'une base de données préexistante), alors vous juste besoin d'utiliser sqlite3_key. Vous fondamentalement juste d'ouvrir la base de données, fournir la clé, puis faire des appels SQL. Il n'y a pas de cryptage séparées / étapes de décryptage - tout cela est géré à la volée par le code sqlcipher. Dans le code tition, vous auriez jamais appeler rekey du tout. Chaque fois que vous ouvrez la base de données que vous appelez clé PRAGMA, puis exécutez une vérification rapide pour faire en sorte que sqlite_master est lisible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top