iOS
SqlCipher-integratie
Zoeken…
Invoering
SQLite is al een populaire API voor permanente gegevensopslag in iOS-apps, dus het voordeel voor ontwikkeling is duidelijk. Als programmeur werk je met een stabiele, goed gedocumenteerde API die toevallig veel goede wrappers beschikbaar heeft in Objective-C, zoals FMDB en gecodeerde kerngegevens. Alle beveiligingsproblemen worden netjes losgekoppeld van de applicatiecode en beheerd door het onderliggende framework.
Opmerkingen
- Open de Terminal, schakel naar de hoofdmap van uw project en betaal de SQLCipher-projectcode met Git:
$ git clone https://github.com/sqlcipher/sqlcipher.git
- Klik met de rechtermuisknop op het project en kies "Bestanden toevoegen aan" Mijn app "(het label varieert afhankelijk van de naam van uw app). Omdat we SQLCipher rechtstreeks in dezelfde map als uw iOS-app hebben gekloond, zou u een sqlcipher-map in uw hoofdmapprojectmap moeten zien. Open deze map en selecteer sqlcipher.xcodeproj
Selecteer het paneel Build-instellingen. Typ in het zoekveld "Koptekst zoekpaden". Dubbelklik op het veld onder de doelkolom en voeg het volgende pad toe: $ (PROJECT_DIR) / sqlcipher / src
Begin 'Andere linkervlaggen' in het zoekveld te typen totdat de instelling verschijnt, dubbelklik om deze te bewerken en voeg de volgende waarde toe: $ (BUILT_PRODUCTS_DIR) /libsqlcipher.a
Begin "Andere C-vlaggen" in het zoekveld te typen totdat de instelling verschijnt, dubbelklik om deze te bewerken en voeg in de pop-up de volgende waarde toe: -DSQLITE_HAS_CODEC
Vouw Doelafhankelijkheid uit en klik op de knop + aan het einde van de lijst. Selecteer in de browser die wordt geopend het doel van de statische bibliotheek sqlcipher :
- Vouw Link Binary uit met Bibliotheken, klik op de knop + aan het einde van de lijst en selecteer de bibliotheek libsqlcipher.a .
- Voeg ten slotte ook onder Link With Libraries Security.framework toe .
Integratie van code:
Integratie om database met wachtwoord te openen.
-(void)checkAndOpenDB{
sqlite3 *db;
NSString *strPassword = @"password";
if (sqlite3_open_v2([[databaseURL path] UTF8String], &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL) == SQLITE_OK) {
const char* key = [strPassword UTF8String];
sqlite3_key(db, key, (int)strlen(key));
if (sqlite3_exec(db1, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
NSLog(@"Password is correct, or a new database has been initialized");
} else {
NSLog(@"Incorrect password!");
}
sqlite3_close(db);
}
}
- (NSURL *)databaseURL
{
NSArray *URLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *directoryURL = [URLs firstObject];
NSURL *databaseURL = [directoryURL URLByAppendingPathComponent:@"database.sqlite"];
return databaseURL;
}