私はiOS
アプリケーションで作業しています。 Encryption
& Decryption
&書き込みはiOS 9
まで行われていました。しかし、iOS 10
にアップグレードした後、"ファイルが暗号化されているかデータベースではない"というメッセージが表示され始めました。iOS 10で暗号化されたDBが正しく動作しない
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];
}
読書:次のエラーメッセージで準備されたステートメントを読みながら
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.
}
}
ここではそれが失敗します:「ファイルがあるの暗号化されているか、データベースではありません "。
私は行方不明をお勧めします!
**パスワードを暗号化しない**、攻撃者がDBを取得したときにも暗号化キーを取得します。約100msの間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存します。 password_hash、PBKDF2、Bcryptなどの関数を使用します。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。 – zaph