qt sqlite数据库加密和navicat实现互连互通

最近用qt 搞sqlite加解密数据库,网络查了好些资料,也写了demo。

sqlite加解密可以使用sqlite的dll,但是需要编译,使用也较麻烦。我采用了较常见的SQLITECIPHER方案。网上查了好些资料,都没能实现加密后navicat可以连,或者navicat加密的qt能连。后来经过多次查询两者的加密算法和demo试验,成功使两者互连互通(详见第4点)。

1、下载源码

https://codeload.github.com/devbean/QtCipherSqlitePlugin/zip/refs/heads/develop

2、编译源码,release版本即可,并复制到qt的安装目录一份

qt sqlite数据库加密和navicat实现互连互通_第1张图片

qt sqlite数据库加密和navicat实现互连互通_第2张图片

3、使用

   数据库引擎由QSQLITE换成SQLITECIPHER

    db = QSqlDatabase::addDatabase("SQLITECIPHER",conName);
    db.setDatabaseName(appPath + "data.db");//("webservertest");
    db.setPassword("root");//("root");

    //db.setConnectOptions("QSQLITE_CREATE_KEY"); //设置密码

   //db.setConnectOptions("QSQLITE_REMOVE_KEY"); //去掉密码

4、下面是sqlite的加密算法如下

    /*
  QSQLITE_USE_CIPHER的可选值分别为:
    aes128cbc        AES 128 Bit CBC – No HMAC (wxSQLite3)
    aes256cbc        AES 256 Bit CBC – No HMAC (wxSQLite3)
    chacha20        ChaCha20 – Poly1305 – Poly1305 HMAC (sqleet)
    sqlcipher        AES 256 Bit CBC – SHA1 HMAC (SQLCipher)
*/

    qt默认的加密算法是sqlcipher,而navicat的默认加密算法是aes128cbc,因此不能互用。qt里设置加密算法为aes128cbc即可实现互连互通。
    db = QSqlDatabase::addDatabase("SQLITECIPHER",conName);
    db.setDatabaseName("E:/data.db");
    db.setPassword("pwd");
    db.setConnectOptions("QSQLITE_USE_CIPHER=aes128cbc");

转载请注明出处,这是查了好些资料和经验积累的成果。

你可能感兴趣的:(数据库,sqlite,qt)