私はこれに関するいくつかの投稿があることを知っていますが、私が見逃していない/現在のものがないことを確認したいだけです。
暗号化されていないデータベースでsqlcipherを使用して、それを暗号化する必要があります。新しいデータベースの暗号化は正常に機能しています。
既存のデータベースでsqlcipherキーの再生成を試みていますが、機能していないようです(データベースは暗号化されていないままです)。
[fmdb open];
NSString *sel = @"SELECT count(*) FROM sqlite_master";
FMResultSet *fmr = [self executeQuery : fmdb : sel];
if ( [fmr next] ) // unencrypted
{
NSLog(@"Encrypting");
fmdb.key = @"";
[fmdb rekey : @"somekey"];
}
それ以外の場合は、他のPRAGMAメソッドのいずれかを使用する必要があります。
キーの再生成は、すでに暗号化されているデータベースでのみ機能しますか?
これはFMDatabaseフレームワークを使用していますが、フレームワークの内部で実行しています...
- (BOOL)rekey:(NSString*)key {
#ifdef SQLITE_HAS_CODEC
if (!key) {
return NO;
}
int rc = sqlite3_rekey(db, [key UTF8String], (int)strlen([key UTF8String]));
if (rc != SQLITE_OK) {
NSLog(@"error on rekey: %d", rc);
NSLog(@"%@", [self lastErrorMessage]);
}
return (rc == SQLITE_OK);
#else
return NO;
#endif
}
sqlite3_rekeyを介して実行され、エラーは発生しませんが、データベースは暗号化されません。