我使用 sqlcipher 已有 2 年了。昨天我已经升级到3.0.1版本并尝试编译包括arm64在内的sqlcipher。
如果我安装新版本的应用程序,我可以使用新的密码库,没有任何问题。 但是当我尝试使用 sqlcipher 2.0 制作的数据库升级以前的版本时,我收到错误 26。
新密码似乎无法解密我的数据库。
我还尝试在没有arm64支持的情况下进行编译。同样的问题。
我已经通过使用解决了我的问题
PRAGMA cipher_migrate
这有助于从旧的数据库结构迁移到 sqlcipher 3.0(详细信息)。
必须在设置密钥后立即执行。
如果您想使用新的 sqlcipher 3.0 读取旧数据库(1.X/2.X)
PRAGMA kdf_iter = 4000
设置 kdf_iter 的旧值。现在等于 64,000 (详情)
就 lib sqlite 数据库连接而言,如下所示:
int errorCode = SQLITE_ERROR;
sqlite3 *database = NULL;
errorCode = sqlite3_open_v2(path, &database, SQLITE_OPEN_READWRITE, NULL);
if (errorCode == SQLITE_OK) {
errorCode = sqlite3_key(database, key, (int)strlen(key));
}
if (errorCode == SQLITE_OK) {
errorCode = sqlite3_exec(database, "PRAGMA kdf_iter = 4000", NULL, NULL, NULL);
}