SQLite加解密
0x00 SQLite概述
SQLite是一個(gè)輕量級(jí)、跨平臺(tái)的,開(kāi)源的數(shù)據(jù)庫(kù)引擎,它在讀寫(xiě)效率,消耗總量、延遲時(shí)間和整體簡(jiǎn)單性上具有的優(yōu)越性,使其成為移動(dòng)平臺(tái)數(shù)據(jù)庫(kù)的最佳解決方案。
然而免費(fèi)版的SQLite有一個(gè)致命缺點(diǎn):不支持加密。這就導(dǎo)致存儲(chǔ)在SQLite中的數(shù)據(jù)可以被任何人用任何文本編輯器查看到。
0x01 SQLite加密工具
SQLite Encryption Extension(SEE)
事實(shí)上SQLite有加解密接口,只是免費(fèi)版本沒(méi)有實(shí)現(xiàn)而已。而SQLite Encryption Extension(SEE) 是SQLite的加密版本,提供一下加密方式:
RC4
AES-128 in OFB mode
AES-128 in CCM mode
AES-256 in OFB mode
SQLite Encryption Extension(SEE)版本是收費(fèi)的。
SQLiteEncrypt
使用AES加密,其原理是實(shí)現(xiàn)了開(kāi)源免費(fèi)版SQLite沒(méi)有實(shí)現(xiàn)的加密相關(guān)接口。
SQLiteEncrypt是收費(fèi)的。
SQLiteCrypt
使用256-bitAES加密,其原理和SQLiteEncrypt一樣,都是實(shí)現(xiàn)了SQLite的加密相關(guān)接口。
SQLiteCrypt也是收費(fèi)的。
SQLCipher
首先需要說(shuō)明的是,SQLCipher是完全開(kāi)源的,代碼托管在github上。
SQLCipther使用256-bit AES加密,由于其基于免費(fèi)版的SQLite,主要的加密接口和SQLite是相同的,但也增加了一些自己的接口,詳情見(jiàn)這里。
SQLCipher分為收費(fèi)版本和免費(fèi)版本,官網(wǎng)介紹的區(qū)別為:
只是集成起來(lái)更簡(jiǎn)單,不用再添加openssl依賴(lài)庫(kù),而且編譯速度更快,從功能來(lái)說(shuō)沒(méi)有任何區(qū)別。
0x03??SQLite加密解密實(shí)現(xiàn)
這里介紹得非常詳細(xì)。
0x04 SQLite DB文件解密實(shí)現(xiàn)
看上部分,加解密算法能了解到,DB會(huì)針對(duì)每一頁(yè)進(jìn)行加密或解密操作,每一頁(yè)大小為4096,這大小都為512的倍數(shù)。我們以二進(jìn)制方式去打開(kāi)DB文件可以看到滿(mǎn)足這個(gè)規(guī)律。那么這個(gè)規(guī)律可以幫助我們做什么事情呢,我們通過(guò)規(guī)律就會(huì)知道,db文件會(huì)全部映射到頁(yè)去處理加解密,那么我們解密思路可以總結(jié)為:
0.讀取文件內(nèi)容。
1.找到生成解密的KEY。
2.找到解密函數(shù),傳入KEY以及讀取的文件內(nèi)容。
3.將解密函數(shù)返回的內(nèi)容流讀取出來(lái)即為解密內(nèi)容。
總結(jié)
- 上一篇: mysql8解决区分大小写问题_球磨机“
- 下一篇: 一个简单的空气质量数据监测站项目