sqlite3加密功能 sqlcipher

2021-07-17 00:03:13 字數 2170 閱讀 1905

1.openssl編譯

./config

make

2.sqlcipher編譯

首先是./configure進行配置./configure –enable-tempstore=yes cflags=」-dsqlite_has_codec」 ldflags=」-lcrypto」 –prefix=$pwd/install,之後進行make這樣就編譯完成,編譯完成後生成了可執行檔案sqlcipher,以及庫檔案,可執行檔案可以供我們像shelle那樣進行操作,庫檔案提供了c介面可以供我們在程式中連線引用之中的介面。

2.由sqlite3的非加密檔案生成加密檔案

如何用shell命令將乙個非加密檔案生成加密檔案,比如我們有非加密庫檔案film.db,依據這個檔案生成加密檔案filmen.db

1.首先將非加密檔案film.db的資料庫匯出來到output.sql中,可以用如下的shell語句實現:

sqlite3 film.db 「.dump」 > output.sql或是

sqlite3 film.db 「.output output.sql」 「.dump」

2.讀取之前匯出的資料庫檔案output.sql到加密庫檔案filmen.db,可用如下shell語句實現:

./sqlcipher filmen.db 「pragma key=』key』」 「.read out.sql」

這樣就實現了依據未加密庫檔案film.db生成加密的庫檔案filmen.db,密碼是key。

「pragma key=』key』」就是如果是建立新的庫檔案就是設定密碼,如果是開啟已有的庫檔案,即就是進行鑑權,我們還可以使用rekey進行密碼重新裝置,具體說明見:

詳細介紹了sqlcipher新增的api

我們可以使用hexdump檢視加密與非加密檔案內容是不同的

3.由sqlcipher的加密與非加密檔案轉換

假設我們由sqlcipher生成了加密檔案encrypt.db,將之轉換為非加密檔案plaintext.db,我們可以使用hexdump檢視該檔案是非加密的

$ ./sqlcipher encrypted.db

sqlite> pragma key = 『key』;

sqlite> attach database 『plaintext.db』 as plaintext key 」;

sqlite> select sqlcipher_export(『plaintext』);

sqlite> detach database plaintext;

密碼為空也就是對該庫檔案不進行加密

由非加密庫檔案plaintext.db生成encrypted.db

$ ./sqlcipher plaintext.db

sqlite> attach database 『encrypted.db』 as encrypted key 『testkey』;

sqlite> select sqlcipher_export(『encrypted』);

sqlite> detach database encrypted;

我們注意到這裡並未輸入pragma key來對庫檔案進行鑑權

注意:雖然這裡的plaintext.db用sqlcipher開啟時無需進行鑑權,但是該檔案如果用sqlite3開啟的話還是會開啟失敗,我之前以為由sqlcipher生產的未加密的庫檔案等價於sqlite3的庫檔案,實踐證明並非如此

4.c**介面

之前編譯出了sqlcipher的庫檔案libsqlcipher.so,如果我們想要引用這些c介面只需鏈結這些庫即可,然後使用

sqlite3_open開啟庫檔案

sqlite3_key進行鑑權

sqlite3_exec執行自己的sql語句

sqlite3_close關閉資料庫

以上可以看出,其實這些和sqlite3原有的介面是十分類似的,這裡就是多了一步鑑權,每次重新開啟庫檔案的時候都要進行鑑權,後面就可以正常的對庫檔案進行增刪改查操作了。

當將非加密的庫檔案轉換成加密的庫檔案之後,用視覺化的資料庫工具就會開啟庫檔案失敗,網上說應該是可以sqlcipher編譯成windows版本的話就可以開啟加密檔案了,或者可以將加密庫檔案匯出後重新生成非加密檔案也可以。還有就是如果版本有差異的話也可能會導致開啟檔案失敗。

sqlite3加密編譯

廢話不多說,直接貼出方法,目的在於請路過老鳥幫助測試一下功能是否全面,是否真正實現了加密 反正我用記事本開啟生成的db檔案看不到寫入記錄的明文了 codec.c codec.h rijndael.c rijndael.h codecext.c 二 sqlite3的加密函式說明 sqlite3 key...

使用sqlite3 模組操作sqlite3資料庫

python內建了sqlite3模組,可以操作流行的嵌入式資料庫sqlite3。如果看了我前面的使用 pymysql 操作mysql資料庫這篇文章就更簡單了。因為它們都遵循pep 249,所以操作方法幾乎相同。廢話就不多說了,直接看 吧。都差不多,首先匯入模組,然後建立連線,然後獲取游標物件,之後利...

使用VC6編譯帶加密功能的SQLITE3靜態庫

加密部分使用的是wxsqlite3 3.0.5 1.使用vc6新建乙個空的win32 static library工程。4.新增預處理project settings c c 中在category中選擇preprocessor,在preprocessor definitions中新增sqlite h...