使用带有 SQLCipher 的 FMDB 解密数据库,使用错误密码设置密钥总是 return YES

Decrypt database using FMDB with SQLCipher, setkey with a wrong password always return YES

FMDB 版本 (2.6.2)

问题: 我正在测试 FMDB 和 SQLCipher,发现一个棘手的问题。 我成功地使用密码 'test001' 加密了一个数据库,然后将其导出并使用 DB Brower 打开数据库,使用 'test001' 我打开它没有任何问题。然后在 Xcode 中,我尝试使用密码 'test002' 打开数据库(我这样做是为了测试 FMDB 是否会告诉我我使用了错误的密码),但是 setkey() return YES .我检查 db.lastErrorMessage,它 return 为 nil,这意味着 FMDB 认为我给出了正确的 key.Then 我尝试使用 executeQuery() 从数据库中读取数据,函数 return s 否,NSLog 显示 'file is encrypted or is not a database'.

有人遇到同样的问题吗?这是sqlite的错误还是我以错误的方式使用它?

setkey() return YES

executeQuery() return NO due to decrypt error

在 SQLCipher 中调用 setKey(…)does not verify the password provided is valid for current database, rather it just causes the database to attach a codec context。您在输入数据库后发出的下一个 SQL 命令将导致密钥派生发生(只要您不使用原始十六进制密钥),并且通常会验证 SQLCipher 是否能够使用密钥访问您的数据库。我们通常建议您尝试执行以下查询以验证密码是否有效,因为 sqlite_master table 将始终存在,无论您的模式如何。

SELECT count(*) FROM sqlite_master;