Используйте SqlCipher в Visual Studio

Я уже скомпилировал SQLCipher для Windows и зашифровал / расшифровал файл базы данных, используя SQLCipher в командной строке.

Проблема в последней части этого руководства, когда я использую SQLCipher в Visual Studio.

Похоже, что приложение пропускает эту строку кода, потому что оно не шифрует и не дешифрует, я не получаю никакой ошибки.

if (sqlite3_exec(db, (const char*)"PRAGMA key ='password'", NULL, NULL, NULL) == SQLITE_OK){
            printf("Accepted Key\n");
        };

Может кто-нибудь сказать мне, что не так? или предоставить пример кода C? Заранее спасибо.

1 ответ

Здесь есть пара вопросов для решения. Во-первых, проверка на SQLITE_OK в качестве кода состояния от sqlite3_exec не означает, что указанный пароль действителен для базы данных. Чтобы проверить это после того, как база данных была введена в ключ, мы рекомендуем вам выполнить такой запрос:

SELECT count(*) FROM sqlite_master;

Эта таблица будет присутствовать всегда, независимо от состояния схемы вашего приложения.

Затем, чтобы убедиться, что вы правильно интегрировали библиотеку SQLCipher в свое приложение, мы можем запросить базу данных для PRAGMA cipher_version; сообщили в библиотеке. Ниже приведен пример для этого:

int rc;
sqlite3 *db;
sqlite3_stmt *stmt;

rc = sqlite3_open(":memory:", &db);
if(rc != SQLITE_OK){
  printf("failed to open database\n");
}
rc = sqlite3_prepare(db, "PRAGMA cipher_version;", -1, &stmt, NULL);
rc = sqlite3_step(stmt);
if(rc == SQLITE_ROW){
  printf("SQLCipher version:%s\n", sqlite3_column_text(stmt, 0));
}
sqlite3_finalize(stmt);
if(db != NULL){
  sqlite3_close(db);
}
Другие вопросы по тегам