1. 程式人生 > >Qt+SQLite資料加密的一種思路

Qt+SQLite資料加密的一種思路

瞭解Qt是比較早的,可是一直沒有耐心去做一個練習。近期花了差不多兩週時間做了次Qt開發練習,基本完成了Qt的入門,逃脫微軟平臺又邁出了幾小步。Qt雖然是C++的,但開發應用是比較方便的,我覺得它在介面設計、訊息傳遞方面超過了Delphi,甚至在一些方面更優於.net WinForm。給入門造成門檻的是關於Qt的中文資料相對較少,遇到問題尋找解決方法的成本較高,需要極大的耐心。

在學習Qt的時候在考慮一個問題——資料如何做到一定程度的保密而且能對資料進行方便的查詢?首先想到是用資料庫,而資料庫需要有專門的資料庫伺服器支援,比如Oracle、MySQL、SQLServer,有沒有一種不需要資料庫伺服器支援的資料庫呢?自然又會想到Access、SQLite等。Access 的加密形同虛設,SQLite要支援加密需要修改並重新編譯其原始碼或者購買高階的SQLite版本。

當我開啟Qt自帶的關於資料庫操作的Demo時,無意看到兩行程式碼:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName(":memory:");

用的是上面提到的SQLite資料庫,而這個資料庫的路徑並不像是在本地檔案的路徑。經查,這麼設定可以直接在記憶體中建立一個SQLite資料庫。這樣,資料是可以實現不落地的。那麼一個具有一定保密功能,同時又擁有資料庫查詢效能,而且無需資料庫伺服器支援的資料儲存方案有了。大概思路是這樣的:

1.在資原始檔中附加文字格式的資料檔案,如果對安全性還有擔心,可以加密這個資料檔案。 
2.在程式第一次啟動時在記憶體中建立SQLite資料庫,將這些資料插入到庫中。

這樣之後,當需要對資料進行查詢、排序操作時就可以方便地通過資料庫功能來實現了,同時保證資料庫不落地,資料是比較安全的。唯一要付出的成本是每次程式啟動時都要去將資料插入到即時建立的資料庫中,適用於資料條數和單筆資料都不大,而查詢效能要求較高的情況。

今晚正在研究這個例子,還真不知道資料庫到底放在那個路徑下了,

看到此文,慚愧~~~