Sqlite3加密方案

Sqlite3

開源版的Sqlite3是不支持加密功能的,對于一個保存在本地的數(shù)據(jù)庫來說沒有加密功能讓人難以接受。所幸Sqlite3的作者留下了加密接口,而互聯(lián)網(wǎng)上也有很多高人提供了他們的加密方案,其中有收費的,也有免費的。
這里選擇了一個免費的加密方案SQLCipher,不過該方案沒有直接提供編譯好的庫,只是提供了源代碼,而且編譯略麻煩,如果你不想自己編譯,就只能花500美刀向作者購買編譯好的庫。吾輩屌絲只能望洋興嘆了,只能自己動手豐衣足食。

編譯SQLCipher

在本項目中沒有直接使用二進制庫(lib或者dll),而是直接將源代碼集成到項目中,畢竟sqlite3的源代碼就只有一個.c文件和一個頭文件。
SQLCipher提供了一個方法,用于將SQLCipher的加密代碼加到sqlite3的源碼上從而生成一個"聯(lián)合文件(amalgamation file)",最后將生成的文件加到項目里就好了。

./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC"
make sqlite3.c

執(zhí)行上述兩個命令就能生成以下幾個文件:

  • sqlite3.h
  • sqlite3.c
  • sqlite3ext.h
  • shell.c ——生成客戶端工具的代碼文件,我們用不到這個文件

以上命令都是在Ubuntu環(huán)境下執(zhí)行的,Windows環(huán)境也能編譯但需要額外安裝MSYS2之類的*unix模擬器。

注意:
SQLCipher庫的加密功能有openssl提供,所以首先編譯環(huán)境需要安裝openssl,Ubuntu已經(jīng)默認安裝了。
但編譯SQLCipher還需要用到libssl-dev庫,Ubuntu環(huán)境下可以用下面的命令安裝

sudo apt-get install libssl-dev

另外,在將代碼合入到工程中時,別忘了加上SQLITE_HAS_CODECSQLITE_TEMP_STORE=2這兩個宏

遇到的錯誤

Q: 預編譯頭文件來自編譯器的早期版本,或者預編譯頭為 C++ 而在 C 中使用它(或相反)
A: 工程中包含的sqlite3.c文件不需要stdafx.h預編譯頭,單獨將sqlite3.c的預編譯屬性設置為“不使用預編譯頭”
參考: http://blog.csdn.net/chenlycly/article/details/18423359

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容