【发布时间】:2013-12-16 18:43:21
【问题描述】:
我正在编写一个加密 SQLITE3 数据库的应用程序。对于加密,我使用了 SQLCIPHER。我能够从命令行执行数据库的加密和解密。我正在使用 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 可以直接用于读取加密数据库?
感谢任何帮助。
谢谢,
【问题讨论】:
标签: database encryption sqlite sqlcipher