Я работаю над приложением iOS
. Encryption
& Decryption
читать & Запись работала до iOS 9
. Но после обновления до iOS 10
он начал выдавать сообщение со следующим сообщением, что «файл зашифрован или не является базой данных».Чтение зашифрованной БД, не работающей для iOS 10
Для DB encryption
Я использую следующий код:
sqlite3 *db1;
if (sqlite3_open([[self.databaseURL path] UTF8String], &db1) == SQLITE_OK) {
const char* key = [@"strong" UTF8String];
sqlite3_key(db1, 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(db1);
}
& это работает прекрасно.
Для открытия и чтения операции я использую следующий код:
-(void)openDB
{
NSString *docsDir;
docsDir = [self getDirectoryPath];
aPath = [docsDir stringByAppendingPathComponent: @"SQLITE_DEMO.sqlite"];
dbpath = [aPath UTF8String];
}
Reading:
if (sqlite3_open(dbpath, &contactDBNew) == SQLITE_OK)
{
NSString querySQL = [NSString stringWithFormat:@"SELECT FROM USER"];
const char *query_stmt = [querySQL UTF8String];
char *err;
int check = sqlite3_exec(contactDBNew, query_stmt, NULL, NULL, &err);
if (sqlite3_prepare_v2(contactDBNew, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
// Successfully executed.
} else {
// Error in execution.
}
}
Здесь получить не удалось, читая подготовленное заявление с следующим сообщением об ошибке: «Файл зашифрован или не является базой данных ».
Пожалуйста, предложите, что мне не хватает !!
** Не шифруйте пароли **, когда злоумышленник получает БД, он также получит ключ шифрования. Итерацию над HMAC со случайной солью в течение приблизительно 100 мс и сохранение соли с хешем. Используйте такие функции, как password_hash, PBKDF2, Bcrypt и аналогичные функции. Дело в том, чтобы заставить злоумышленника потратить много времени на поиск паролей грубой силой. – zaph