我正在编写一个加密SQLITE3数据库的应用程序。对于加密,我使用过SQLCIPHER.i能够从命令行执行数据库的加密和解密。我正在使用c ++编写客户端应用程序。这是我测试密钥的代码(用于加密)。
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 :(得分:0)
如果要发出PRAGMA key
命令,则必须在C ++应用程序中引用密码短语值。检查您提交的样本,您还没有这样做。或者,您可以拨打sqlite3_key
。
答案 1 :(得分:0)
最后我能够做到。在执行我的程序时,我还需要包含-lsqlciper。添加成功执行代码。 我使用它构建它 “ g ++ testSQLCipher.cpp -I / usr / local / include -L / usr / local / lib -lsqlcipher -L / usr / lib / i386-linux-gnu -ldl -o testSQL ”