我知道有一些关于此的帖子,但只是想确保有一些我没有丢失/当前的东西。
使用 sqlcipher,带有未加密的数据库,想对其进行加密。加密新数据库工作正常。
我正在尝试使用现有数据库的 sqlcipher rekey 似乎不起作用(数据库保持未加密)。
[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 运行,没有错误,但数据库没有被加密。