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

时间:2014-02-10 16:41:04

标签: sqlcipher

我已经使用sqlcipher 2年了。昨天我已升级到3.0.1版,并尝试编译包含arm64的sqlcipher。

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

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

此外,我尝试编译没有arm64支持。同样的问题。

1 个答案:

答案 0 :(得分:2)

我使用

解决了我的问题
PRAGMA cipher_migrate 

有助于从旧的DB结构迁移到sqlcipher 3.0(Details)。

必须在设置密钥后立即执行。

如果您想使用新的sqlcipher 3.0使用

读取旧数据库(1.X / 2.X)
PRAGMA kdf_iter = 4000

为kdf_iter设置旧值。现在它等于64,000(Details

就lib sqlite而言,db连接如下所示:

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);
}