IOS рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реБрд░рдХреНрд╖рд╛





рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЬрд╛рдирдХрд╛рд░реА рдХреА рднреЗрджреНрдпрддрд╛ рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд╛рд╕рд╡рд░реНрдб рдореИрдиреЗрдЬрд░, рдиреЛрдЯрдкреИрдб, рдЖрдпреЛрдЬрдХ, рдлрд╛рдЗрдиреЗрдВрд╕ рдЯреНрд░реИрдХрд░ рдЬреИрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдмрд╛рд╣рд░реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИред



рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / var / mobile / Applications / рдХреЗ рдЕрдВрджрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ "рд╕реИрдВрдбрдмреЙрдХреНрд╕" рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред рдЖрд╡реЗрджрди рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдп рдЗрд╕рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИрдВред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ NSUserDefaults рдЯрд┐рдВрдЪрд░, рдЕрдиреНрдп рдкреНрд▓рд┐рд╕реНрдЯ рдлрд╛рдЗрд▓реЗрдВ, рдХреБрдХреАрдЬрд╝, рд╕рд╛рде рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдЬреЗрд▓рдмреНрд░реЗрдХ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрд╣ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, iFunBox ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред



рдЗрд╕ рднреЗрджреНрдпрддрд╛ рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рднреБрдЧрддрд╛рди рдХрд┐рдП рдЧрдП рдРрдк рд╕реНрдЯреЛрд░ рдЯреЙрдк рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдЪрдордХрддрд╛ рд╣реИ - рд╕реНрдорд╛рд░реНрдЯ рд╕реЗрдл ред



IFunBox рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо / рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВрдЧреЗред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: notes.sqlite , notes.sqlite-shm , notes.sqlite-wal ред Notes.sqlite рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддреАрди рдЯреЗрдмрд▓ рд╣реИрдВ:



рд╡рд┐рд╢реЗрд╖ рд░реБрдЪрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реА рд╣реИред ZDATE рдлрд╝реАрд▓реНрдб рдореЗрдВ рдкреНрд░рдХрд╛рд╢рди рдХреА рддрд┐рдерд┐, ZBODY рдореЗрдВ - рдиреЛрдЯ рдХрд╛ рдкрд╛рда, ZTITLE рдореЗрдВ - рдЗрд╕рдХрд╛ рд╢реАрд░реНрд╖рдХ рд╣реИред рд╕рднреА рдкрд╛рда рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдкрд╛рда рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ:







рддреНрдпрд╛рдЧ
рдбреЗрд╡рд▓рдкрд░ рдХреЛ рднреЗрджреНрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдФрд░ / рдпрд╛ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗред рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рднреЗрджреНрдпрддрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд╣реАрдВ рд╣реИ; рдЖрд╡реЗрджрди рдПрдХ рдЦреБрд▓реЗ рд░реВрдк рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред



рдЗрд╕ рднреЗрджреНрдпрддрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдордХреНрдЦреА рдкрд░ рдкрд╛рд░рджрд░реНрд╢реА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ SQLCipher рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП ред рд╕рднреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ (AES256, рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░, PBKDF2 рдХреБрдВрдЬрд┐рдпреЛрдВ) рдХреЗ рд▓рд┐рдП SQLCipher OpenSSL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг, рдкреНрд░рд▓реЗрдЦрди рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдПрдВ рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВред



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо FMDatabase рдХреЗ рд╕рд╛рде SQLCipher рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦреЗрдВрдЧреЗ , рдХреЛрдХреЛрдЖ рдореЗрдВ SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЖрд╡рд░рдгред



рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ FMDatabase рдФрд░ SQLCipher рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП Cocoapods рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдкреЙрдбрдлрд╛рдЗрд▓ рдореЗрдВ рдкреЙрдб рд▓рд╛рдЗрди 'FMDB / SQLCipher' рдЬреЛрдбрд╝реЗрдВред рдЕрдм AppDelegate.m рдХреА рдУрд░ рдореБрдбрд╝реЗрдВ:



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDir = [documentPaths objectAtIndex:0]; self.databasePath = [documentDir stringByAppendingPathComponent:@"sqmple.sqlite"]; [self createAndCheckDatabase]; return YES; } -(void) createAndCheckDatabase { BOOL success; NSFileManager *fileManager = [NSFileManager defaultManager]; success = [fileManager fileExistsAtPath:self.databasePath]; if (success) return; // If file exists, don't do anything // if file does not exist, make a copy of the one in the Resources folder NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sample.sqlite"]; // File path [fileManager copyItemAtPath:databasePathFromApp toPath:self.databasePath error:nil]; // Make a copy of the file in the Documents folder // Set the new encrypted database path to be in the Documents Folder NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDir = [documentPaths objectAtIndex:0]; NSString *encryptedDatabasePath = [documentDir stringByAppendingPathComponent:@"encrypted.sqlite"]; NSString *key = @"PassKey"; // SQL Query. NOTE THAT DATABASE IS THE FULL PATH NOT ONLY THE NAME const char* sqlQ = [[NSString stringWithFormat:@"ATTACH DATABASE '%@' AS encrypted KEY '%@';", encryptedDatabasePath, key] UTF8String]; sqlite3 *unencrypted_DB; if (sqlite3_open([self.databasePath UTF8String], &unencrypted_DB) == SQLITE_OK) { // Attach empty encrypted database to unencrypted database sqlite3_exec(unencrypted_DB, sqlQ, NULL, NULL, NULL); // export database sqlite3_exec(unencrypted_DB, "SELECT sqlcipher_export('encrypted');", NULL, NULL, NULL); // Detach encrypted database sqlite3_exec(unencrypted_DB, "DETACH DATABASE encrypted;", NULL, NULL, NULL); sqlite3_close(unencrypted_DB); } else { sqlite3_close(unencrypted_DB); NSAssert1(NO, @"Failed to open database with message '%s'.", sqlite3_errmsg(unencrypted_DB)); } self.databasePath = [documentDir stringByAppendingPathComponent:@"encrypted.sqlite"]; }
      
      





рдпрд╣ рд╕рдм, рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



 - (FMDatabase *)openWriteableDatabase { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"encrypted.sqlite"]; FMDatabase* database = [FMDatabase databaseWithPath:writableDBPath]; [database open]; NSString *key = @"PassKey"; [database setKey:key]; return database; }
      
      





рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЦреБрд▓рд╛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде, рдЖрдк рдХреЛрдИ рднреА рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛, рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдирд╛ рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдмреЗрд╢рдХ, рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрд╡реЗрджрди рдХреЛрдб рдореЗрдВ рд╡рд╛рдпрд░реНрдб рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдХреБрдВрдЬреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдлрд╝реЛрд░рд╡реЗрдВрдбрд░ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкрд╛рд╕рд╡рд░реНрдб)ред рдбреЗрдЯрд╛рдмреЗрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреБрдВрдЬреА рдХреЛ рдмрджрд▓рдирд╛ рдХреБрдЫ рдФрд░ рдХреЗ рд╕рдорд╛рди рд╕рд░рд▓ рд╣реИ:



 NSString *newKey = @"NewPassKey"; [database rekey:newKey];
      
      





рдпрджрд┐ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд┐рд╕ рдкрд░ рдореБрдЦреНрдп рдкреАрдврд╝реА рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЧрддрд┐рд╢реАрд▓ рд╣реИ, рддреЛ рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред



рдмреЗрд╢рдХ, SQLCipher рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рд▓реЗрдХрд┐рди рдпрд╣ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рд╢реЛрдзрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдбрд░рд╛ рджреЗрдЧрд╛ рдФрд░ рдЕрдиреБрднрд╡реА рдкрдЯрд╛рдЦреЗ рдХреЗ рдЬреАрд╡рди рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдРрдк рд╕реНрдЯреЛрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдИрдЖрд░рдПрди рдлреЙрд░реНрдо рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдпрд╛рдХреВрдм рджреНрд╡рд╛рд░рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред



All Articles