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...