關(guān)于 SQLite 加密须妻,看這篇就夠了

導(dǎo)語(yǔ):
SQLite 是一個(gè)輕量級(jí)的顿涣、開(kāi)源的關(guān)系型數(shù)據(jù)庫(kù),是目前移動(dòng)平臺(tái)(如 iOS吱型、Android)數(shù)據(jù)庫(kù)的最佳選擇逸贾。然而免費(fèi)版的 SQLite 是不支持加密的(官網(wǎng)下的默認(rèn)就是免費(fèi)版的) ,這就導(dǎo)致了存儲(chǔ)在 SQLite 中的數(shù)據(jù)很容易被人查看到津滞,不法分子可能會(huì)利用數(shù)據(jù)庫(kù)表結(jié)構(gòu)及內(nèi)容字段分析我們的應(yīng)用,進(jìn)而發(fā)起攻擊灼伤。出于安全的考慮触徐,我們當(dāng)然要對(duì)數(shù)據(jù)庫(kù)文件進(jìn)行加密。

數(shù)據(jù)庫(kù)加密

  • 加密方式的選擇
    對(duì)數(shù)據(jù)庫(kù)加密主要有兩種方式:

    1. 將內(nèi)容加密后再存入數(shù)據(jù)庫(kù)中
      這種方式使用簡(jiǎn)單狐赡,只需要在入庫(kù)和出庫(kù)時(shí)將字段加解密即可撞鹉,但數(shù)據(jù)庫(kù)的表結(jié)構(gòu)信息依然能被查看到。并且對(duì)內(nèi)容加密后颖侄,搜索查看數(shù)據(jù)庫(kù)中的內(nèi)容都比較麻煩鸟雏。

    2. 對(duì)數(shù)據(jù)庫(kù)文件直接進(jìn)行加密
      這種方式是比較安全的加密方式,目前已知的 SQLite 加密方案基本上都是通過(guò)這種方式實(shí)現(xiàn)的览祖。

  • 加密工具的選擇
    目前已知的對(duì) SQLite 加密的工具主要有「SQLite Encryption Extension (SEE)」孝鹊、「SQLiteEncrypt」、「SQLiteCrypt」展蒂、「SQLCipher」又活,但是這里面僅有 SQLCipher 有免費(fèi)版本。

這樣看來(lái)锰悼,開(kāi)源的 SQLCipher 是 SQLite 加密的最佳選擇了柳骄。

簡(jiǎn)單介紹下,SQLCipher 是一個(gè)開(kāi)源的箕般,基于免費(fèi)版 SQLite 的加密數(shù)據(jù)庫(kù)耐薯。它采用 256-bit AES 進(jìn)行加密,主要的接口和 SQLite 相同丝里,另外增加了一些加解密相關(guān)的接口曲初。

數(shù)據(jù)庫(kù)遷移

可能已發(fā)布的 APP 使用的是未加密的 SQLite 版本,因此當(dāng)用戶(hù)覆蓋安裝時(shí)丙者,就需要對(duì)未加密的數(shù)據(jù)庫(kù)進(jìn)行加密复斥。而 SQLCipher 出于效率考慮,它是基于頁(yè)進(jìn)行加密的械媒,因此需要對(duì)原有數(shù)據(jù)庫(kù)中的內(nèi)容進(jìn)行遷移目锭。

根據(jù) SQLCipher 官方文檔评汰, 其本身已經(jīng)提供了對(duì)數(shù)據(jù)庫(kù)遷移的支持,主要就是sqlcipher_export 函數(shù)痢虹。

需要注意的是:
由于檢測(cè)數(shù)據(jù)庫(kù)是否加密比較困難被去,因?yàn)閿?shù)據(jù)庫(kù)尚未打開(kāi),沒(méi)辦法調(diào)用數(shù)據(jù)庫(kù)提供的方法進(jìn)行檢測(cè)(事實(shí)上可以采用檢測(cè) SQLite 數(shù)據(jù)庫(kù)文件的前 100 個(gè)字節(jié)中的信息來(lái)檢測(cè)是否加密)奖唯。因此最好是采用檢測(cè)舊數(shù)據(jù)庫(kù)文件是否存在的方式來(lái)決定是否對(duì)數(shù)據(jù)庫(kù)進(jìn)行遷移惨缆。如果舊數(shù)據(jù)庫(kù)存在則按照遷移流程進(jìn)行,若不存在則按照加密流程進(jìn)行即可丰捷。

密碼安全

數(shù)據(jù)庫(kù)加密及遷移問(wèn)題都解決了坯墨,但是如何保障所用密碼的安全呢?

由于 SQLCipher 在設(shè)計(jì)之初就將密碼的管理與數(shù)據(jù)庫(kù)加密的實(shí)現(xiàn)區(qū)分開(kāi)來(lái)病往,因?yàn)檫@樣能提供更好的靈活性捣染,但同時(shí)也意味著使用者需要負(fù)責(zé)密碼的管理。官網(wǎng) FAQ 中建議如下:1. 密碼內(nèi)容應(yīng)該直接來(lái)自用戶(hù)停巷,且不應(yīng)該存儲(chǔ)在設(shè)備上耍攘。2. 密碼內(nèi)容不應(yīng)該直接硬編碼在程序中。

事實(shí)上畔勤,若要密碼真正的可靠安全蕾各,需要采用類(lèi)似 HTTPS 的一套流程,存在與服務(wù)器的交互且實(shí)現(xiàn)復(fù)雜庆揪。

其實(shí)可以采用簡(jiǎn)單的密碼算法式曲,配合密碼更新機(jī)制來(lái)解決這個(gè)問(wèn)題∪铝颍基本方案如下:

  1. 采用「用戶(hù)ID + 固定字符(如 abc123 ) + 加密算法版本號(hào)」進(jìn)行 MD5 生成密碼检访。然后在數(shù)據(jù)庫(kù)文件名包含「用戶(hù)ID」和「加密算法版本號(hào)」,這樣只要拿到數(shù)據(jù)庫(kù)文件就可以算出該數(shù)據(jù)庫(kù)的密碼仔掸,算法相對(duì)簡(jiǎn)單且使用方便脆贵。

  2. 為了防止數(shù)據(jù)庫(kù)密碼泄露或者被破解,可以對(duì)數(shù)據(jù)庫(kù)密碼增加更新策略起暮,SQLCipher 本身已經(jīng)提供了更新密碼的接口卖氨。決定是否需要更新密碼可以通過(guò)判斷數(shù)據(jù)庫(kù)名稱(chēng)中的「加密算法版本號(hào)」實(shí)現(xiàn)。若「加密算法版本號(hào)」與當(dāng)前 APP 中內(nèi)置的不一致负懦,則執(zhí)行新的密碼生成算法(如替換固定字符為 xyz888 等)筒捺,隨后再調(diào)用 SQLCipher 更新密碼的接口即可。


參考:

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纸厉,一起剝皮案震驚了整個(gè)濱河市系吭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颗品,老刑警劉巖肯尺,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沃缘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡则吟,警方通過(guò)查閱死者的電腦和手機(jī)槐臀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)氓仲,“玉大人水慨,你說(shuō)我怎么就攤上這事【纯福” “怎么了晰洒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)舔哪。 經(jīng)常有香客問(wèn)我欢顷,道長(zhǎng),這世上最難降的妖魔是什么捉蚤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮炼七,結(jié)果婚禮上缆巧,老公的妹妹穿的比我還像新娘。我一直安慰自己豌拙,他們只是感情好陕悬,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著按傅,像睡著了一般捉超。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唯绍,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天拼岳,我揣著相機(jī)與錄音,去河邊找鬼况芒。 笑死惜纸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绝骚。 我是一名探鬼主播耐版,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼压汪!你這毒婦竟也來(lái)了粪牲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤止剖,失蹤者是張志新(化名)和其女友劉穎腺阳,沒(méi)想到半個(gè)月后落君,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舌狗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年叽奥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痛侍。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朝氓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出主届,到底是詐尸還是另有隱情赵哲,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布君丁,位于F島的核電站枫夺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏绘闷。R本人自食惡果不足惜橡庞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望印蔗。 院中可真熱鬧扒最,春花似錦、人聲如沸华嘹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耙厚。三九已至强挫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間薛躬,已是汗流浹背俯渤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泛豪,地道東北人稠诲。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像诡曙,于是被迫代替她去往敵國(guó)和親臀叙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • 關(guān)于SQLiteSQLite是一個(gè)輕量的价卤、跨平臺(tái)的劝萤、開(kāi)源的數(shù)據(jù)庫(kù)引擎,它的在讀寫(xiě)效率慎璧、消耗總量床嫌、延遲時(shí)間和整體簡(jiǎn)單...
    Crazy2015閱讀 3,727評(píng)論 0 5
  • 前情提要 之前升級(jí)Electron框架至5.x版本時(shí)跨释,因編譯報(bào)sqlite3相關(guān)錯(cuò),加上Sqlcipher官網(wǎng)上聲...
    charles0427閱讀 2,200評(píng)論 0 0
  • 你好厌处,WCDB WCDB是一個(gè)高效鳖谈、完整、易用的移動(dòng)數(shù)據(jù)庫(kù)框架阔涉,基于SQLCipher缆娃,支持iOS, macOS和...
    he15his閱讀 5,780評(píng)論 4 4
  • 作者:Krimson 鏈接:https://zhuanlan.zhihu.com/p/24331240 來(lái)源:知乎...
    K里姆森閱讀 287評(píng)論 0 0
  • 八十年代初的深秋,我出生在北京城瑰排。 后來(lái)聽(tīng)我媽說(shuō)贯要,家里幾年都不開(kāi)花的牡丹在我生下來(lái)幾天后居然開(kāi)花了,擺脫了差點(diǎn)被扔...
    鬼小童閱讀 72評(píng)論 0 0