Transition from cipher 2.0 to 3.0 fails. Error 26

2019-08-07 08:48发布

I've used sqlcipher for 2 years. Yesterday I've upgraded to version 3.0.1 and tried to compile sqlcipher including arm64.

If I install new version of my app I can use new cipher lib without any problems. But when I try to upgrade my previous version with DB made with sqlcipher 2.0 I get error 26.

It seems that new cipher can't decrypt my DB.

Also I tried to compile without arm64 support. The same problem.

标签: sqlcipher
1条回答
Ridiculous、
2楼-- · 2019-08-07 09:36

I've solved my problem by using

PRAGMA cipher_migrate 

which help to migrate from older DB structures to sqlcipher 3.0 (Details).

It must be executed right after setting the key.

If you want to read old DB (1.X/2.X) with new sqlcipher 3.0 use

PRAGMA kdf_iter = 4000

to set old value for kdf_iter. Now it equals 64,000 (Details)

In terms of lib sqlite db connection looks as follows:

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);
}
查看更多
登录 后发表回答