在資安上面不太安全
所以我在網路上找了加密的方法
也就是sqlcipher
他試建立在sqlite上的open source
不過要取的他的windows dll 需要錢
而且不知道跟qt有沒有相容
所以要自行編譯
- 所需要的工具:
- MinGW:(C/C++編譯器)
下載點:http://sourceforge.net/projects/mingw/
找到mingw-get-inst-XXXXXX.exe的下載
開啟後會自動到網路上下載安裝
MSYS也可以選擇下載
不過以上下載失敗機率很大
所以最簡單的方法就是去載QT SDK Online installer
選擇下載MinGW就好
- MSYS:(在Windows上模擬Linux工具)
下載後安裝會顯示出視窗
就輸入y
安裝MSYS請先一定要先安裝MinGW
所以就輸入y
接下來就輸入mingw存放的路徑
因為我是用QtSDK的mingw所以就只定他
這裡是說要不要幫你設定mingw的檔案配置
之後也會需要修改/etc/fatab的設定
這裡就y就好
到這裡就安裝結束
到桌面開啟Msys就可以啟動Linux的模式
MSYS基本認知
開啟後他所有的檔案都是在
C:\msys\1.0為根路徑
所以在裡面新增資料夾或是其他程式在MSYS就可以看見
新增MSYS的其他掛載區域
開啟C:\msys\1.0\etc\fstab
沒有就自己創
假設你想要讀取C槽下面的資料
就輸入
C:/ /c如下圖
這樣開啟MSYS就可以輸入cd /c 就可以讀取到c槽的東西
- Qt的windows的source code:
因為上面沒有source code所以沒有辦法編譯額外plugin上去
下載點:http://qt.nokia.com/downloads/windows-cpp
安裝後就library會有src的這個資料夾也就是原始檔
- Tcl/Tk:
不過他是原始檔所以要自行編譯加入
下載點:http://prdownloads.sourceforge.net/tcl/tcl8.5.11-src.tar.gz
將檔案放到C:\msys\1.0\home\matttt
或是開啟MSYS
輸入
wget http://prdownloads.sourceforge.net/tcl/tcl8.5.11-src.tar.gz也可以
開啟MSYS
就解壓縮檔案
tar xvf tcl8.5.11-src.tar.gz解壓縮完後就進入資料夾
並且下command開始編譯
注意mingw需要確定在MSYS系統下的哪裡
我是在/mingw裡
cd /home/matttt/tcl8.5.11 ./configure --prefix=/mingw make make install接下來要改檔名
在mingw裡的bin
因為他安裝生成的檔名為tclsh85.exe
所以要改成tclsh.exe
要不然會後面會有問題
- Open SSL:
所以就去取得open source的Open SSL
下載點: http://slproweb.com/products/Win32OpenSSL.html
找到Win32 OpenSSL v1.0.1b
下載後安裝完就可以了
- sqlcipher
下載點:https://github.com/sqlcipher/sqlcipher/zipball/v2.0.3
解壓縮到C槽下面
開始編譯
首先要先確定MSYS的fstab上有加上
qt的source code的位置
mingw的位置
sqlcipher的位置
在
C:\Qt\4.8.1\src\plugins\sqldrivers下新增sqlcipher資料夾
接下來切換到source code的sqlcipher的資料夾下
設定並且編譯
cd /c/sqlcipher ./configure –prefix=/qt/src/plugins/sqldrivers/sqlcipher –disable-tcl –disable-amalgamation CFLAGS="-DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2 -I/c/OpenSSL/include /c/Windows/System32/libeay32.dll -L/c/OpenSSL/lib/MinGW" LDFLAGS="-leay32" make make dll make install cp /c/OpenSSL/lib/MinGW/libeay32.a /qt/src/plugins/sqldrivers/sqlcipher/lib/接下來在
C:\Qt\4.8.1\src\plugins\sqldrivers\sqlcipher新增兩個檔案並輸入以下內容
sqlcipher.pro內容
TARGET = qsqlcipher HEADERS = ../../../sql/drivers/sqlite/qsql_sqlite.h SOURCES = smain.cpp \ ../../../sql/drivers/sqlite/qsql_sqlite.cpp !system-sqlite:!contains( LIBS, .*sqlite.* ) { CONFIG(release, debug|release):DEFINES *= NDEBUG DEFINES += SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE SQLITE_HAS_CODEC INCLUDEPATH += include LIBS += ./lib/libsqlite3.a ./lib/libeay32.a -Ic:/OpenSSL-Win32/include c:/Windows/System32/libeay32.dll } else { LIBS *= $$QT_LFLAGS_SQLITE QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE } include(../qsqldriverbase.pri)
smain.cpp內容
#include <qsqldriverplugin.h> #include <qstringlist.h> #include "../../../../src/sql/drivers/sqlite/qsql_sqlite.h" QT_BEGIN_NAMESPACE class QSQLCipherDriverPlugin : public QSqlDriverPlugin { public: QSQLCipherDriverPlugin(); QSqlDriver* create(const QString &); QStringList keys() const; }; QSQLCipherDriverPlugin::QSQLCipherDriverPlugin() : QSqlDriverPlugin() { } QSqlDriver* QSQLCipherDriverPlugin::create(const QString &name) { if (name == QLatin1String("QSQLCIPHER")) { QSQLiteDriver* driver = new QSQLiteDriver(); return driver; } return 0; } QStringList QSQLCipherDriverPlugin::keys() const { QStringList l; l << QLatin1String("QSQLCIPHER"); return l; } Q_EXPORT_STATIC_PLUGIN(QSQLCipherDriverPlugin) Q_EXPORT_PLUGIN2(qsqlite, QSQLCipherDriverPlugin) QT_END_NAMESPACE
接下來就是用MSYS到
plugin下開始編譯
注意要用你安裝的source code的qmake而不是Qt SDK的qmake
cd /c/Qt/4.8.1/src/plugins/sqldrivers/sqlcipher /c/Qt/4.8.1/bin/qmake make make install這樣就完成編譯和設置了
將此Qt的source code加入Qt Creator的設定中
Tool→options...→Qt4→add
加入c:\Qt\4.8.1\qmake.exe
開啟一個新的Qt porject
加入
qDebug() << QSqlDatabase::drivers();
在project加上Qt4.8.1的debug編譯方式
最後用Qt4.8.1的debug編譯後執行
看有沒有QSQLCIPHER有就成功
使用方式
在QSqlQuery query;後面加上
query.exec("PRAGMA key = 'secretkey';");secretkey是你想要設的key