从密码 2.0 到 3.0 的转换失败。尝试读取时出现错误 26

问题描述 投票:0回答:1

我使用 sqlcipher 已有 2 年了。昨天我已经升级到3.0.1版本并尝试编译包括arm64在内的sqlcipher。

如果我安装新版本的应用程序,我可以使用新的密码库,没有任何问题。 但是当我尝试使用 sqlcipher 2.0 制作的数据库升级以前的版本时,我收到错误 26。

新密码似乎无法解密我的数据库。

我还尝试在没有arm64支持的情况下进行编译。同样的问题。

ios objective-c sqlcipher
1个回答
2
投票

我已经通过使用解决了我的问题

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.