iOS
SqlCipher-integration
Sök…
Introduktion
SQLite är redan ett populärt API för ihållande datalagring i iOS-appar, så uppsidan för utveckling är uppenbar. Som programmerare arbetar du med ett stabilt, väldokumenterat API som råkar ha många bra omslag tillgängliga i Objekt-C, såsom FMDB och Encrypted Core Data. Alla säkerhetsproblem kopplas av från applikationskoden och hanteras av det underliggande ramverket.
Anmärkningar
- Öppna terminalen, växla till projektets rotkatalog och kolla in SQLCipher-projektkoden med Git:
$ git clone https://github.com/sqlcipher/sqlcipher.git
- Högerklicka på projektet och välj "Lägg till filer till" Min app "" (etiketten varierar beroende på appens namn). Eftersom vi klonade SQLCipher direkt i samma mapp som din iOS-app bör du se en sqlcipher-mapp i din rotprojektmapp. Öppna den här mappen och välj sqlcipher.xcodeproj
Välj fönstret Bygginställningar. I sökfältet skriver du in "Header Search Paths". Dubbelklicka på fältet under målkolumnen och lägg till följande sökväg: $ (PROJECT_DIR) / sqlcipher / src
Börja skriva "Andra länkflaggor" i sökfältet tills inställningen visas, dubbelklicka för att redigera den och lägg till följande värde: $ (BUILT_PRODUCTS_DIR) /libsqlcipher.a
Börja skriva "Andra C-flaggor" i sökfältet tills inställningen visas, dubbelklicka för att redigera den och lägga till följande värde i popup-fönstret : -DSQLITE_HAS_CODEC
Expandera målberoende och klicka på + -knappen i slutet av listan. I webbläsaren som öppnas väljer du det statiska biblioteksmålet sqlcipher :
- Expandera Link Binary With Libraries, klicka på + -knappen i slutet av listan och välj biblsqlcipher.a- biblioteket.
- Till sist, även under Link With Libraries, lägg till Security.framework .
Integration av kod:
Integration för att öppna databasen med lösenord.
-(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;
}