2010-12-06 15 views
0

Ich hatte viele Probleme, meine SQLITE-Datenbank für mein Projekt zu verschlüsseln und schließlich versuche ich, die attach-Datenbankmethode zu verwenden, um meine unverschlüsselte Datenbank zu verschlüsseln.Datenbank für SQLCIPHER anhängen

Ich habe versucht, den Befehl attach am Terminal auszuführen, nur um zu realisieren, dass die Ausgabe eine unverschlüsselte Datenbank wäre. Also, richtigerweise sollte ich die Befehle in meinem Projekt ausführen, mit meinen sqlcipher und ssl-Bibliotheken richtig importiert?

Also habe ich es versucht, die Methode läuft ohne Fehler, aber ich habe nicht einmal die verschlüsselte Datenbank im Dokumentenverzeichnis erstellt werden. Was mache ich falsch? [Code Snippet unten]

- (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; 
} 

Vielen Dank für die Hilfe Jungs!

+0

Hallo seelani, Können Sie im Detail erklären, wie Sie eine verschlüsselte Datenbank aus einer SQL-SQL-Datenbank erstellt haben? Ich stecke gerade fest, wie du warst –

+1

hast du es herausgefunden, Entschuldigung für die späte Antwort war eine Woche Urlaub genießen. Nun, das ist der Link, den ich verwendet habe, um mein Problem zu lösen, https://github.com/sjlombardo/sqlcipher/issues/closed#issue/1 Blick auf den zweiten Kommentar von sjlombardo. – seelani

+0

Muß KeyCryptENC.db vor der Ausführung dieses Codes existieren? Sollte KeyCryptENC.db im Verzeichnis Dokumente für die App gespeichert werden? –

Antwort

1

nach intensiverer Recherche erkannte ich das Problem der Verschlüsselung, ME. Ich habe Mac OS X native sqlite3 verwendet. Und ja, diese link sollte jedem helfen, der ein ähnliches Problem hat wie ich.

BWAHAHA, ich fühle mich so albern, dass ich nicht früher daran denke.

+0

Hallo seelani, kannst du mir sagen woher der sqlite für sqlciper benutzt wird? Ich habe das gleiche Problem. –

+0

Sie sollten sqlite aus dem Quellverzeichnis von sqlcipher verwenden. Sie finden die detaillierte Beschreibung von sjlombardo im 2. Kommentar der Ausgabe # 1: https://github.com/sjlombardo/sqlcipher/issues/1 –

+0

Da wir sqlcipher zu seiner eigenen Organisation auf GitHub verlegt haben, haben die Links zu Problemen geändert. Ich denke, das ist der Kommentar, mit dem Sie verlinkt haben: https://github.com/sqlcipher/sqlcipher/issues/1#issuecomment-24738 –

Verwandte Themen