跨平台加密版 SQLite 3 – wxSQLite3

來源:互聯網
上載者:User

SQLite 3 開源版不帶加密功能,對於一個儲存在本地的資料庫來說沒有加密功能讓人難以接受,只要用記事本開啟資料庫就可以看到資料庫內儲存的資料,對安全多多少少有一點影響。有一個辦法是把內容加密後儲存到資料庫中,但遇到類似 like,或欄位內容與欄位內容比較這就不行了。治本的辦法是讓 SQLite 原生的支援加密。好在 SQLite 的作者預留了加密解密的相關介面,許多愛好者也自己修改源版添加加密功能。如果你也在關注,那你可能已經閱讀了大量關於如何添加加密的文章,同時我也不是很通相關的技術,我就不再講解如何修改源碼了。雖然網上有大量的文章教你如何修改源碼,但都沒有提供編譯後的 DLL 檔案,或者提供的 DLL 版本過低。這裡介紹一個開源項目:wxSQLite3,該項目是一個 SQLite 的 C++ warpper,它順帶將 SQLite 的加密函數實現了,並且它使用 AES 演算法進行加密。你可以在這裡下載到最新的包,在目錄 \sqlite3\secure 下有這幾個目錄,aes128 目錄下的 sqlite3.DLL 檔案,是已編譯的用128位 AES 演算法加密的 SQLite 3 DLL 檔案,而 aes 256 目錄下的是用256位 AES 演算法加密的,而 src 目錄下是實現加密的 SQLite 3 原始碼。同時 wxSQLite3 項目更新很快,你總是可以下載到較新的包。從1.9.8版本開始將對256位 AES 密碼編譯演算法進行實驗,估計不久的版本就可以穩定使用。

使用起來也很簡單,首先開啟資料庫 sqlite3_open,然後在操作資料庫之前執行 sqlite3_key 後就可進行資料庫操作,否則會返回錯誤。

sqlite3_key是輸入密鑰,如果資料庫已加密必須先執行此函數並輸入正確密鑰才能進行操作,如果資料庫沒有加密,執行此函數後進行資料庫操作反而會出現“此資料庫已加密或不是一個資料庫檔案”的錯誤。

int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定資料庫,pKey 是密鑰,nKey 是密鑰長度。例:sqlite3_key( db, "abc", 3);

sqlite3_rekey是變更密鑰或給沒有加密的資料庫添加密鑰或清空密鑰,變更密鑰或清空密鑰前必須先正確執行 sqlite3_key。在正確執行 sqlite3_rekey 之後在 sqlite3_close 關閉資料庫之前可以正常操作資料庫,不需要再執行 sqlite3_key。

int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),參數同上。

清空密鑰為 sqlite3_rekey( db, NULL, 0)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.