iOS
Integración SqlCipher
Buscar..
Introducción
SQLite ya es una API popular para el almacenamiento de datos persistentes en aplicaciones iOS, por lo que la ventaja para el desarrollo es obvia. Como programador, trabajas con una API estable y bien documentada que tiene muchos envoltorios buenos disponibles en Objective-C, como FMDB y datos encriptados. Todos los problemas de seguridad están claramente desconectados del código de la aplicación y son administrados por el marco subyacente.
Observaciones
- Abra la Terminal, cambie al directorio raíz de su proyecto y verifique el código del proyecto SQLCipher usando Git:
$ git clone https://github.com/sqlcipher/sqlcipher.git
- Haga clic derecho en el proyecto y elija "Agregar archivos a" Mi aplicación "" (la etiqueta variará según el nombre de su aplicación). Ya que clonamos SQLCipher directamente en la misma carpeta que su aplicación iOS, debería ver una carpeta sqlcipher en su carpeta de proyecto raíz. Abra esta carpeta y seleccione sqlcipher.xcodeproj
Seleccione el panel Crear configuración. En el campo de búsqueda, escriba "Rutas de búsqueda de encabezado". Haga doble clic en el campo debajo de la columna de destino y agregue la siguiente ruta: $ (PROJECT_DIR) / sqlcipher / src
Comience a escribir "Otros indicadores de vinculador" en el campo de búsqueda hasta que aparezca la configuración, haga doble clic para editarlo y agregue el siguiente valor: $ (BUILT_PRODUCTS_DIR) /libsqlcipher.a
Comience a escribir "Otros indicadores C" en el campo de búsqueda hasta que aparezca la configuración, haga doble clic para editarlo y, en la ventana emergente, agregue el siguiente valor: -DSQLITE_HAS_CODEC
Expanda las Dependencias de destino y haga clic en el botón + al final de la lista. En el navegador que se abre, seleccione el destino de la biblioteca estática sqlcipher :
- Expanda Enlace binario con bibliotecas, haga clic en el botón + al final de la lista y seleccione la biblioteca libsqlcipher.a .
- Finalmente, también en Enlace con bibliotecas, agregue Security.framework .
Integración de código:
Integración para abrir la base de datos mediante contraseña.
-(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;
}