SQLite 資料庫加密的一種解決方案

2021-06-17 16:14:57 字數 1285 閱讀 6412

sqlite

是乙個非常小巧的跨平台嵌入式資料庫,它的資料庫以檔案的形式存放在本地磁碟上,但是在其開源的免費版中它卻缺少了乙個資料庫中幾乎是必備的功能,那就是對於資料庫的加密。

sqlite

的資料庫檔案可以被任何的文字編輯工具開啟,從而獲取到其中的資料,這一點令很多開發者感到不安。

但是其實

sqlite

是支援資料庫加密的,前些天看到了網友

arris

的帖子,具體如下:

sqlite

的源**中原本就考慮了加密的實現,並且保留了介面

sqlite3_key

和sqlite3_rekey

,只是這兩個函式在

free

版本中沒有實現,但幸運的是,

sqlite

的源**的**是開放並允許修改,我們可以很方便的增加加密的實現。在

鏈結的的**包中就包含有可加密

sqlite

的源**的實現,我根據這個包編譯了乙個可加密的

sqlite

。這個包加密實現呼叫了

windows api

的加密函式,所以只能在

windows

中使用。

這個可加密的版本是在乙個

ado.net 2.0 sqlite data provider

的基礎上改過來的(

),據原作者聲稱效率損失在千分之一以下。原始工程是基於

vs2005

的,但是考慮到其普及性還不是很廣,所以重新建立了乙個居於

vc2003

的工程。

其實sqlite

的兩個加密函式使用起來非常的簡單,下面分情況說明:

①給乙個未加密的資料庫新增密碼:如果想要新增密碼,則可以在開啟資料庫檔案之後,關閉資料庫檔案之前的任何時刻呼叫

sqlite3_key

函式即可,該函式有三個引數,其中第乙個引數為資料庫物件,第二個引數是要設定的密碼,第三個是密碼的長度。例如:

sqlite3_key(db,"1q2w3e4r",8);//

給資料庫設定密碼1q2w3e4r

②讀取乙個加密資料庫中的資料:完成這個任務依然十分簡單,你只需要在開啟資料庫之後,再次呼叫一下

sqlite3_key

函式即可,例如,但資料庫密碼是123456時,你只需要在**中加入sqlite3_key(db,"123456",6);

sqlite資料庫加密的一種解決方案

SQLite 資料庫加密的一種解決方案

sqlite3 db sqlite3 stmt stat char zerrmsg 0 char temp 256 fileroot 256 char buffer2 1024 0 sprintf temp,t s t utf.db ccodingconv gb2312 2 utf8 fileroo...

SQLite 資料庫加密的一種解決方案

sqlite是乙個非常小巧的跨平台嵌入式資料庫,它的資料庫以檔案的形式存放在本地磁碟上,但是在其開源的免費版中它卻缺少了乙個資料庫中幾乎是 必備的功能,那就是對於資料庫的加密。sqlite的資料庫檔案可以被任何的文字編輯工具開啟,從而獲取到其中的資料,這一點令很多開發者感到不安。但是其實sqlite...

sqlite資料庫加密

sqlite3加密支援 sqlite3免費版並不支援加密,不過留有介面,有不少開源的加密實現,不過有的需要使用openssl配置略顯繁瑣,不過使用wxsqlite比較方便。wxsqlite3 wxsqlite3是wxwidgets的擴充套件元件,對sqlite3的c api進行了封裝,並且實現了加解...