SQLCIPHER sqlite加密的iphone ios将未加密的数据库转换为加密的数据库
我知道这上面有一些帖子,但我只是想确保我没有遗漏/最新的东西 使用sqlcipher,对于未加密的数据库,您希望对其进行加密。加密一个新数据库工作正常 我正在使用现有数据库尝试sqlcipher密钥更新,但似乎无法工作(数据库仍然未加密) 否则将不得不使用其他PRAGMA方法之一,等等 重新密钥是否仅适用于已加密的数据库 这是使用FMDatabase框架,但在框架的引擎盖下它正在做SQLCIPHER sqlite加密的iphone ios将未加密的数据库转换为加密的数据库,iphone,sqlite,encryption,sqlcipher,Iphone,Sqlite,Encryption,Sqlcipher,我知道这上面有一些帖子,但我只是想确保我没有遗漏/最新的东西 使用sqlcipher,对于未加密的数据库,您希望对其进行加密。加密一个新数据库工作正常 我正在使用现有数据库尝试sqlcipher密钥更新,但似乎无法工作(数据库仍然未加密) 否则将不得不使用其他PRAGMA方法之一,等等 重新密钥是否仅适用于已加密的数据库 这是使用FMDatabase框架,但在框架的引擎盖下它正在做 - (BOOL)rekey:(NSString*)key { #ifdef SQLITE_HAS_
- (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加密明文数据库。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"];
}
加密明文数据库的正确方法是附加和导出-请参见此处的示例之前关于此问题的所有评论都是不正确的不能使用rekey加密明文数据库。rekey仅用于更改加密数据库上的加密密钥
加密明文数据库的正确方法是附加和导出-参见此处的示例诀窍是,当数据库已加密时,使用数据库检查加密(下次打开应用程序),但不使用密钥进行选择,这将失败,但是,数据库必须关闭,然后用密钥重新打开。诀窍是,当数据库已加密时,使用数据库检查加密(下次打开应用程序),但不使用密钥进行选择,这将失败,但随后必须关闭数据库,然后用键重新打开。您使用的是PRAGMA-REKEY。当然,然后需要执行PRAGMA KEY(在重新设置键之后)来设置新的键值。(我不知道你的fmdb函数翻译成什么。大概
rekey
翻译成PRAGMA rekey。也应该有key
或setkey
函数。)请注意,SQLite要求DB处于某种相对“纯”的状态才能重新设置密钥。不应该有任何打开的查询等,可能是在执行重新设置密钥之前必须关闭并重新打开(我忘记了细节。)如果执行PRAGMA_重新设置密钥,并且数据库没有加密,则可能是指定了空/空密钥,或者没有安装SQLCipher。再一次,我不知道rekey
函数做了什么。我今天遇到了完全相同的问题(FMDB、sqlcipher、iOS)。重新设置密钥功能不起任何作用。。。你找到解决办法了吗?你用的是PRAGMA-REKEY。当然,然后需要执行PRAGMA KEY(在重新设置键之后)来设置新的键值。(我不知道你的fmdb函数翻译成什么。大概rekey
翻译成PRAGMA rekey。也应该有key
或setkey
函数。)请注意,SQLite要求DB处于某种相对“纯”的状态才能重新设置密钥。不应该有任何打开的查询等,可能是在执行重新设置密钥之前必须关闭并重新打开(我忘记了细节。)如果执行PRAGMA_重新设置密钥,并且数据库没有加密,则可能是指定了空/空密钥,或者没有安装SQLCipher。再一次,我不知道rekey
函数做了什么。我今天遇到了完全相同的问题(FMDB、sqlcipher、iOS)。重新设置密钥功能不起任何作用。。。你找到解决方案了吗?好吧,现在我已经这样做了,数据库可以通过附件进行加密,但只加密一次。当我尝试用相同的密码再次打开数据库时,它会说数据库已加密,不会打开。您是否关闭了原始数据库,重新打开了新的加密数据库,然后再次设置了密钥?好的,现在我已经这样做了,数据库与附件加密良好,但只加密了一次。当我尝试使用相同的密码再次打开数据库时,它会显示该数据库已加密且不会打开。您是否关闭了原始数据库,重新打开了新的加密数据库,然后再次设置了密钥?