【问题标题】:sqlite3_exec returns 26 in linuxsqlite3_exec 在 linux 中返回 26
【发布时间】: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


    【解决方案1】:

    如果您要发出PRAGMA key 命令,则必须在您的 C++ 应用程序中引用密码短语值。查看您提交的样本,您尚未执行此操作。或者,您也可以拨打sqlite3_key

    【讨论】:

    • 尼克,感谢您的回复。在这里发帖时,我错误地没有添加报价。在我的代码中,我使用引号。我首先安装了 sqlite3,我使用了所有这些 api 工作正常。之后我安装了 sqlcipher,然后就开始痛苦了。我不明白为什么我不能以编程方式执行 sqlite3 命令。它与安装或安装顺序或软件包版本、二进制文件的链接有什么关系吗?
    • 我忘了提到当我第一次使用 sqlite3_key 但我遇到错误“'sqlite3_key' 未在范围内声明”所以我使用 PRAGMA 切换到 sqlite_exec。
    • 这可能是您的应用程序中集成 SQLCipher 的问题。要使 sqlite3_key 可用,您必须在 CFLAGS 中包含 SQLITE_HAS_CODEC
    • 在配置和在我的 c++ 程序中,我添加了 SQLITE_HAS_CODEC 但没有工作。我认为链接存在一些问题。无论如何,我会尝试探索并随时通知您。
    【解决方案2】:

    我终于可以做到了。在执行我的程序时,我还需要包含 -lsqlciper。添加成功执行代码。 我使用它构建它 "g++ testSQLCipher.cpp -I /usr/local/include -L /usr/local/lib -lsqlcipher -L /usr/lib/i386-linux-gnu -ldl -o testSQL" p>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2014-08-01
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      相关资源
      最近更新 更多