【问题标题】:SQLCipher: verify key against open databaseSQLCipher:针对打开的数据库验证密钥
【发布时间】:2016-06-04 22:35:11
【问题描述】:

是否可以检查给定的密钥是否是对已经打开和解锁的数据库的正确解密?

#define SQLITE_HAS_CODEC
#include <sqlcipher/sqlite3.h>
#include <assert.h>

sqlite3 *open_db(void)
{
    sqlite3 *dbh;

    sqlite3_open_v2("test.db", &dbh, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    sqlite3_key(dbh, "xxxx", 4);

    return dbh;
}

int key_is_valid(sqlite3 *dbh, const char *key)
{
    /* ??? */
    return 1;
}

int main(int argc, char *argv[])
{
    sqlite3 *dbh = open_db();

    assert(key_is_valid(dbh, "test"));
    assert(!key_is_valid(dbh, "foobar"));

    return 0;
}

我知道我可以存储传递给sqlite3_key 的解密密钥以供以后验证,但我想避免它。

我需要这样做的原因是我想允许用户更改密码,并且在此之前我希望他们提供旧密码。

【问题讨论】:

    标签: c sqlcipher


    【解决方案1】:

    您可以通过尝试从sqlite_master 表中读取来验证提供的密码在数据库键入后是否有效:

    SELECT count(*) FROM sqlite_master;

    库要求在更改密码之前提供正确的密码。正确键入数据库后,您可以使用以下 API 更改密码:

    int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      相关资源
      最近更新 更多