2016-06-04 27 views
0

Ist es möglich, zu überprüfen, ob ein bestimmter Schlüssel eine korrekte Entschlüsselung für bereits geöffnete und entsperrte Datenbanken ist?SQLCipher: Schlüssel gegen geöffnete Datenbank überprüfen

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

Ich weiß, ich Entschlüsselungsschlüssel zu sqlite3_key für eine spätere Überprüfung bestanden speichern könnte, aber ich mag es vermeiden.

Der Grund, warum ich dies tun muss, ist, dass ich Benutzern erlauben soll, das Passwort zu ändern, und davor möchte ich, dass sie das alte bereitstellen.

Antwort

0

können Sie überprüfen das angegebene Passwort nach dem Keying der Datenbank aus der sqlite_master Tabelle zu lesen, indem er versucht gilt:

SELECT count(*) FROM sqlite_master;

Die Bibliothek erfordern das richtige Passwort zur Verfügung gestellt wird, bevor das Passwort zu ändern. Nachdem Sie die Datenbank richtig eingegeben haben, können Sie das Kennwort mithilfe der folgenden API ändern:

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