2010-12-06 4 views
0

J'ai eu beaucoup de problèmes pour crypter ma base de données SQLITE pour mon projet et finalement j'essaie d'utiliser la méthode de base de données attach pour crypter ma base de données non cryptée.Attacher la base de données pour SQLCIPHER

J'ai essayé d'exécuter la commande attach sur Terminal, uniquement pour réaliser que la sortie serait une base de données non cryptée. Donc par droit, je suis censé exécuter les commandes dans mon projet, avec mes bibliothèques sqlcipher et ssl importés à droite?

Donc, je l'ai essayé, la méthode fonctionne sans aucun défaut, mais je n'ai même pas obtenu la base de données cryptée à créer dans le répertoire de documents. Qu'est-ce que je fais mal? [Code Snippet Below]

- (void)encryptDB 
{ 
    NSLog (@"Start"); 
    sqlite3 *DB = [iPad_3AppDelegate getNewDBConnection]; 

    sqlite3_exec(DB, "ATTACH DATABASE KeyCryptENC.db AS encrypted KEY 1234;", NULL, NULL, NULL); 

    sqlite3_exec(DB, "CREATE TABLE encrypted.Account(A_id,C_ID,Account_Name,Username,Password,Other_Information);", NULL, NULL, NULL); 
    sqlite3_exec(DB, "CREATE TABLE encrypted.Categories(C_ID,Category);", NULL, NULL, NULL); 
    sqlite3_exec(DB, "CREATE TABLE encrypted.UserInfo(Password,Hint,Secret_Question,Secret_Answer);", NULL, NULL, NULL); 

    sqlite3_exec(DB, "INSERT INTO encrypted.Account SELECT * FROM Account;", NULL, NULL, NULL); 
    sqlite3_exec(DB, "INSERT INTO encrypted.Categories SELECT * FROM Categories;", NULL, NULL, NULL); 
    sqlite3_exec(DB, "INSERT INTO encrypted.UserInfo SELECT * FROM UserInfo;", NULL, NULL, NULL); 

    sqlite3_exec(DB, "DETACH DATABASE encrypted;", NULL, NULL, NULL); 

    NSLog (@"End"); 

} 

+ (sqlite3 *)getNewDBConnection{ 
    sqlite3 *newDBconnection; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"KeyCrypt.sqlite"]; 
    // Open the database. The database was prepared outside the application. 
    if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) { 
    NSLog(@"Database Successfully Opened :)"); 
    } else { 
    NSLog(@"Error in opening database :("); 
    } 
    return newDBconnection; 
} 

Un grand merci pour l'aide les gars!

+0

Salut seelani, pouvez-vous expliquer en détail, comment vous avez réussi à créer une base de données cryptée à partir d'une base de données sqlite en texte brut? Je suis juste coincé comme vous étiez –

+1

avez-vous compris, désolé pour la réponse tardive bénéficiait d'une semaine de vacances. Eh bien, c'est le lien que j'ai utilisé pour résoudre mon problème, https://github.com/sjlombardo/sqlcipher/issues/closed#issue/1 regardez le deuxième commentaire par sjlombardo. – seelani

+0

Est-ce que KeyCryptENC.db devait exister avant d'exécuter ce code? KeyCryptENC.db doit-il être enregistré dans le répertoire Documents de l'application? –

Répondre

1

après des recherches plus intensives j'ai réalisé le problème au chiffrement, ME. J'utilisais Mac OS X natif sqlite3. Et oui, ce link devrait aider toute personne qui fait face à un problème similaire au mien.

BWAHAHA, je me sens tellement bête de ne pas y penser plus tôt.

+0

Salut seelani, pouvez-vous me dire d'où le sqlite pour sqlciper à utiliser? Je suis aussi avoir le même problème. –

+0

Vous devez utiliser sqlite à partir du répertoire source de sqlcipher. Vous pouvez trouver la description détaillée par sjlombardo dans le 2ème commentaire du numéro 1: https://github.com/sjlombardo/sqlcipher/issues/1 –

+0

Parce que nous avons déplacé sqlcipher vers sa propre organisation sur GitHub, les liens vers les problèmes ont modifié. Je pense que c'est le commentaire que vous étiez lié à: https://github.com/sqlcipher/sqlcipher/issues/1#issuecomment-24738 –

Questions connexes