SQLCipherを使用して、暗号化されていないsqlite3データベースのコンテンツを暗号化されたデータベースに追加しようとしています。私はこれとこれから私がやろうとしていることに基づいています。しかし、いくつかのことが私にはわかりません。
行
ATTACH DATABASE
では、暗号化されたデータベースはタイプである必要があり.db
ますか?.sqlite
元のデータベースと一致させることはできますか?上記の暗号化されたデータベースはすでに存在している必要がありますか?もしそうなら、それはアプリのどこにあるべきですか?ファイルへのパス(ドキュメントディレクトリなど)を指定する必要がありますか?
暗号化に成功したデータベースはどこにありますか?どこに保存されますか?
これが私のコードです:
+ (void)encryptDB
{
sqlite3 *unencrypted_DB;
NSString *path_u = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
stringByAppendingPathComponent:@"dict.sqlite"];
if (sqlite3_open([path_u UTF8String], &unencrypted_DB) == SQLITE_OK) {
NSLog(@"Database Opened");
// Attach empty encrypted database to unencrypted database
sqlite3_exec(unencrypted_DB, "ATTACH DATABASE 'dict_encrypted.sqlite' AS encrypted KEY '1234';", NULL, NULL, NULL);
// Create new tables within encrypted database to match those in unencrypted database
sqlite3_exec(unencrypted_DB, "CREATE TABLE encrypted.t1(A,B,C);", NULL, NULL, NULL);
// Copy items from unencrypted database into encrypted database
sqlite3_exec(unencrypted_DB, "INSERT INTO encrypted.t1 SELECT * FROM t1;", NULL, NULL, NULL);
// Detach encrypted database
sqlite3_exec(unencrypted_DB, "DETACH DATABASE encrypted;", NULL, NULL, NULL);
NSLog (@"End database copying");
sqlite3_close(unencrypted_DB);
}
else {
sqlite3_close(unencrypted_DB);
NSAssert1(NO, @"Failed to open database with message '%s'.", sqlite3_errmsg(unencrypted_DB));
}
}