Я пишу приложение, которое шифрует базу данных 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, который я мог бы использовать непосредственно для чтения зашифрованной базы данных?
всякая помощь приветствуется.
спасибо,
Ник, спасибо за ваш ответ. при размещении здесь я по ошибке не добавлял цитату. в моем коде я использую кавычки. я сначала установил sqlite3, я использовал все эти apis, которые отлично работали. после этого я установил sqlcipher, и вот эта боль начинается. Я не понимаю, почему я не могу выполнять команды sqlite3 программно. имеет ли он что-либо делать с установкой или порядком установки или версией пакета, связыванием двоичных файлов? – user2094814
Я забыл упомянуть, что когда я впервые использовал sqlite3_key, но у меня была ошибка gettiing, «sqlite3_key» не был объявлен в области видимости », поэтому я переключаюсь на sqlite_exec с помощью PRAGMA. – user2094814
Это может быть проблемой при интеграции SQLCipher в ваше приложение. Чтобы сделать 'sqlite3_key' доступным, вы должны включить' SQLITE_HAS_CODEC' в свои CFLAGS. –