I have manually created a SQLite database (named "localDB.db") and protected it with a password, by using DB browser. If I am not mistaken, DB browser uses SQLCipher (with a default page size of 1024), for encrypting a database. However, if I try to open the database with the QT plugin QtCipherSqlitePlugin (see following code), I always get the error that "the password is invalid or cipher does not match", although I obviously provide the correct password and have set the cipher as "sqlcipher".
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QSqlError>
#include <QtSql/QSqlDatabase>
#ifdef Q_OS_IOS
#include <QtPlugin>
Q_IMPORT_PLUGIN(SqliteCipherDriverPlugin)
#endif
#define CONNECTION_FAILED -1
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << QSqlDatabase::drivers();
QString dir = QCoreApplication::applicationDirPath();
QString db_file_path = dir + "/Data/localDB.db";
qDebug() << "DB file path is:" << db_file_path;
QSqlDatabase db = QSqlDatabase::addDatabase("SQLITECIPHER");
db.setDatabaseName(db_file_path);
db.setPassword("test");
db.setConnectOptions("QSQLITE_USE_CIPHER=sqlcipher");
db.open();
if (!db.isOpen())
{
qDebug() << "Connection failed: " << db.lastError().driverText();
exit(CONNECTION_FAILED);
}
return 0;
}
The same happens for the inverse process: if I encrypt a database by using this plugin, then I am unable to manually open the database with DB Browser or other similar programs, because it does not accept the password.
How can I solve this problem? I need to access an encrypted SQLite database through both my software and a third-party application like DB browser. Thanks in advance.