2013-12-16 2 views
0

Я пишу приложение, которое шифрует базу данных SQLITE3. для шифрования я использовал SQLCIPHER.i могу выполнить шифрование и дешифрование базы данных из командной строки. Я пишу клиентское приложение с помощью C++. вот мой код для проверки ключа (используется для шифрования).sqlite3_exec возвращает 26 в linux

int main() 
{ 
    sqlite3 *DataBase; 

    if(sqlite3_open("encrypted.db", &DataBase)== SQLITE_OK) 
    { 

     int result = sqlite3_exec(DataBase, "PRAGMA KEY = 'testkey';", NULL, NULL, NULL); 

     result = sqlite3_exec(DataBase,"SELECT user_id FROM USER;", NULL, NULL, NULL); 
     if(result == SQLITE_OK) 
     { 
      cout<<"sqlite3_exec success"<<endl; 
     }   
     else 
     { 
        cout<<"sqlite3_exec failed"<<endl; 
        cout<<"sqlite3_exec returns "<<result<<endl; 

      }  

    } 
} 

я могу же с помощью командной строки:

./sqlite3 encrypted.db 
PRAGMA key = 'testkey'; 
SELECT user_id FROM USER; 

я зашифрованного мой access.db с помощью:

./sqlite3 access.db 
sqlite> ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'testkey'; 
sqlite> SELECT sqlcipher_export('encrypted'); 
sqlite> DETACH DATABASE encrypted; 

Я не понимаю, почему я могу сделать то же самое, используя командную строку, а не код C++. пожалуйста, дайте мне знать, если я делаю что-то неправильно.

, пожалуйста, также дайте мне знать, если мне нужно получить доступ к зашифрованной базе данных, тогда я должен сначала ее расшифровать, а затем я должен прочитать базу данных открытого текста, нет ли API, который я мог бы использовать непосредственно для чтения зашифрованной базы данных?

всякая помощь приветствуется.

спасибо,

ответ

0

наконец-то я в состоянии это сделать. при выполнении моей программы мне нужно включить -lsqcciper. добавив, что успешно выполнил код. я построить его с помощью "г ++ testSQLCipher.cpp -I/USR/местные/включить -L/USR/местные/Библиотека -lsqlcipher -L/USR/Lib/i386-Linux-гну -ldl -o testSQL"

0

Если вы собираетесь выдать команду PRAGMA key, вы должны указать значение ключевой фразы в приложении C++. Просмотрев представленный образец, вы этого не сделали. Кроме того, вы можете просто позвонить sqlite3_key.

+0

Ник, спасибо за ваш ответ. при размещении здесь я по ошибке не добавлял цитату. в моем коде я использую кавычки. я сначала установил sqlite3, я использовал все эти apis, которые отлично работали. после этого я установил sqlcipher, и вот эта боль начинается. Я не понимаю, почему я не могу выполнять команды sqlite3 программно. имеет ли он что-либо делать с установкой или порядком установки или версией пакета, связыванием двоичных файлов? – user2094814

+0

Я забыл упомянуть, что когда я впервые использовал sqlite3_key, но у меня была ошибка gettiing, «sqlite3_key» не был объявлен в области видимости », поэтому я переключаюсь на sqlite_exec с помощью PRAGMA. – user2094814

+0

Это может быть проблемой при интеграции SQLCipher в ваше приложение. Чтобы сделать 'sqlite3_key' доступным, вы должны включить' SQLITE_HAS_CODEC' в свои CFLAGS. –