iOS
응용 프로그램에서 작업하고 있습니다. Encryption
& Decryption
& 쓰기가 iOS 9
까지 작동하고있었습니다. 그러나 iOS 10
으로 업그레이드 한 후 "파일이 암호화되었거나 데이터베이스가 아닙니다"라는 메시지와 함께 문제가 발생하기 시작했습니다.암호화 된 DB 읽기가 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];
}
읽기 : 다음과 같은 오류 메시지와 함께 준비된 문장을 읽는 동안 실패한 얻을
다음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