自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQLite3數(shù)據(jù)庫加密方案

移動(dòng)開發(fā) iOS
數(shù)據(jù)庫加密:用戶認(rèn)證以及訪問控制對(duì)訪問數(shù)據(jù)庫進(jìn)行了控制,但攻擊者可能會(huì)利用操作系統(tǒng)或數(shù)據(jù)庫漏洞,或物理接觸計(jì)算機(jī),而直接接觸數(shù)據(jù)庫系統(tǒng)文件,從而可能繞過身份認(rèn)證和存取控制而直接竊取或篡改數(shù)據(jù)庫內(nèi)容。對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行加密是防范這類威脅的有效手段。

針對(duì)sqlite數(shù)據(jù)庫文件,進(jìn)行加密。現(xiàn)有兩種方案如下
1.對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行加密。
2.對(duì)數(shù)據(jù)庫文件進(jìn)行加密
兩種加密方式的優(yōu)缺點(diǎn),比較如下:

一、對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行加密

優(yōu)點(diǎn):
1.實(shí)現(xiàn)數(shù)據(jù)加密快速,只需添加兩個(gè)方法
一是:對(duì)明文數(shù)據(jù)進(jìn)行加密返回密文數(shù)據(jù)
二是:對(duì)密文數(shù)據(jù)進(jìn)行解密返回明文數(shù)據(jù)
2.程序無需進(jìn)行太大變動(dòng),僅在對(duì)數(shù)據(jù)進(jìn)行
添加,修改,刪除,查詢時(shí)。針對(duì)指定的表字段
進(jìn)行修改進(jìn)行加密,解密的字段即可。

不足:
1.由于對(duì)數(shù)據(jù)進(jìn)行了加密。所以為了看到明文,必須密文進(jìn)行解密。
因此會(huì)增加處理器的消耗。因終端手機(jī)的處理能力有限,可能會(huì)出現(xiàn)
處理數(shù)據(jù)緩慢的現(xiàn)象發(fā)生。
2.僅僅對(duì)數(shù)據(jù)進(jìn)行了加密,還是可以看到數(shù)據(jù)表的sql語句,
可能猜測到表的作用。另外,如果沒有對(duì)一個(gè)表中的所有字段加密,
則可以看沒有加密的明文數(shù)據(jù)。

需要做的工作:
1.無需考慮平臺(tái)差異性,qt,android,ios都能快速
的實(shí)現(xiàn)。只需在每個(gè)平臺(tái)上,使用各自的語言,實(shí)現(xiàn)
同樣的加密,解密算法即可。
2.需要對(duì)加密算法進(jìn)行了解,選擇一種加密算法,進(jìn)行實(shí)現(xiàn)。

二、對(duì)數(shù)據(jù)庫文件進(jìn)行加密

優(yōu)點(diǎn):
1.對(duì)整個(gè)文件進(jìn)行了加密,用戶通過編輯器看不到任何有用的數(shù)據(jù),
用戶使用sqlite browser軟件也無法打開文件查看數(shù)據(jù),保證了數(shù)據(jù)安全。
2.進(jìn)行打開數(shù)據(jù)庫時(shí),使用程序sqlite3_key(db,"********",8);
即可對(duì)文件解密,對(duì)數(shù)據(jù)表的操作無需進(jìn)行加密,采用明文即可。

不足:
1.需要修改sqlite的源代碼,這個(gè)工作難度比較大。
2.需要對(duì)修改后的sqlite進(jìn)行編譯,需要對(duì)makefile有所了解,
手動(dòng)編寫makefile文件,對(duì)源程序進(jìn)行編譯。因平臺(tái)差異性,可能會(huì)造成
某個(gè)平臺(tái)無法編譯生成動(dòng)態(tài)鏈接庫的可能。
3.需要對(duì)數(shù)據(jù)訪問層代碼進(jìn)行修改,例如qt平臺(tái)需要將以前對(duì)數(shù)據(jù)庫操作使用的
QSqlQuery類,更改為使用sqlite3.h文件中定義操作,對(duì)數(shù)據(jù)庫操作。
其他平臺(tái)也一樣,都要做這一步的修改。
4.在程序編譯時(shí),要加入使用加密的動(dòng)態(tài)鏈接庫(linux為共享庫.so文件)
windows平臺(tái)最容易,只需將所使用的dll文件copy到應(yīng)用程序中即可。
其他平臺(tái)需要實(shí)驗(yàn),看如何引入庫,如果編譯。

需要做的工作:
1.修改sqlite源代碼,追加對(duì)數(shù)據(jù)庫文件進(jìn)行加密的功能。
2.編譯含有加密功能的程序源代碼,生成各自平臺(tái)需要使用的庫文件。
3.將加密sqlite庫文件引入各自平臺(tái)中,修改數(shù)據(jù)庫訪問層代碼。
4.進(jìn)行程序的部署,測試。

加密算法的相關(guān)知識(shí):
加密技術(shù)通常分為兩大類:“對(duì)稱式”和“非對(duì)稱式”。
對(duì)稱式加密就是加密和解密使用同一個(gè)密鑰,通常稱之為“Session Key ”這種加密技術(shù)目前被廣泛采用,如美國政府所采用的DES加密標(biāo)準(zhǔn)就是一種典型的“對(duì)稱式”加密法,它的Session Key長度為56Bits。
非對(duì)稱式加密就是加密和解密所使用的不是同一個(gè)密鑰,通常有兩個(gè)密鑰,稱為“公鑰”和“私鑰”,它們兩個(gè)必需配對(duì)使用,否則不能打開加密文件。這里的 “公鑰”是指可以對(duì)外公布的,“私鑰”則不能,只能由持有人一個(gè)人知道。它的優(yōu)越性就在這里,因?yàn)閷?duì)稱式的加密方法如果是在網(wǎng)絡(luò)上傳輸加密文件就很難把密 鑰告訴對(duì)方,不管用什么方法都有可能被別竊聽到。而非對(duì)稱式的加密方法有兩個(gè)密鑰,且其中的“公鑰”是可以公開的,也就不怕別人知道,收件人解密時(shí)只要用 自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問題。

常見加密算法
DES(Data Encryption Standard):對(duì)稱算法,數(shù)據(jù)加密標(biāo)準(zhǔn),速度較快,適用于加密大量數(shù)據(jù)的場合;
3DES(Triple DES):是基于DES的對(duì)稱算法,對(duì)一塊數(shù)據(jù)用三個(gè)不同的密鑰進(jìn)行三次加密,強(qiáng)度更高;
RC2和 RC4:對(duì)稱算法,用變長密鑰對(duì)大量數(shù)據(jù)進(jìn)行加密,比 DES 快;
IDEA(International Data Encryption Algorithm)國際數(shù)據(jù)加密算法,使用 128 位密鑰提供非常強(qiáng)的安全性;
RSA:由 RSA 公司發(fā)明,是一個(gè)支持變長密鑰的公共密鑰算法,需要加密的文件塊的長度也是可變的,非對(duì)稱算法;
DSA(Digital Signature Algorithm):數(shù)字簽名算法,是一種標(biāo)準(zhǔn)的 DSS(數(shù)字簽名標(biāo)準(zhǔn)),嚴(yán)格來說不算加密算法;
AES(Advanced Encryption Standard):高級(jí)加密標(biāo)準(zhǔn),對(duì)稱算法,是下一代的加密算法標(biāo)準(zhǔn),速度快,安全級(jí)別高,目前 AES 標(biāo)準(zhǔn)的一個(gè)實(shí)現(xiàn)是 Rijndael 算法; BLOWFISH,它使用變長的密鑰,長度可達(dá)448位,運(yùn)行速度很快;
MD5:嚴(yán)格來說不算加密算法,只能說是摘要算法
對(duì)MD5算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后將生成一個(gè)128位散列值。
在MD5算法中,首先需要對(duì)信息進(jìn)行填充,使其字節(jié)長度對(duì)512求余的結(jié)果等于448。因此,信息的字節(jié)長度(Bits Length)將被擴(kuò)展至N*512+448,即N*64+56個(gè)字節(jié)(Bytes),N為一個(gè)正整數(shù)。填充的方法如下,在信息的后面填充一個(gè)1和無數(shù)個(gè) 0,直到滿足上面的條件時(shí)才停止用0對(duì)信息的填充。然后,在這個(gè)結(jié)果后面附加一個(gè)以64位二進(jìn)制表示的填充前信息長度。經(jīng)過這兩步的處理,現(xiàn)在的信息字節(jié) 長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數(shù)倍。這樣做的原因是為滿足后面處理中對(duì)信息長度的要求。(可參見MD5算 法詞條)
SSF33,SSF28,SCB2(SM1):國家密碼局的隱蔽不公開的商用算法,在國內(nèi)民用和商用的,除這些都不容許使用外,其他的都可以使用;

三、數(shù)據(jù)庫加密原理
目前主流的數(shù)據(jù)庫都采用了各種安全措施,主要包括用戶認(rèn)證、訪問控
制、數(shù)據(jù)加密存儲(chǔ)和數(shù)據(jù)庫操作審計(jì)等措施。

用戶認(rèn)證:用戶或者程序向數(shù)據(jù)庫提供自己的有效身份證明,數(shù)據(jù)庫鑒別用戶的身份是否合法,只有合法的用戶才能存取數(shù)據(jù)庫中的數(shù)據(jù)。用戶認(rèn)證是所有安全機(jī)制的前提,只有通過認(rèn)證才能進(jìn)行授權(quán)訪問和審計(jì)。

訪問控制:數(shù)據(jù)庫管理系統(tǒng)為不同的用戶分配不同的權(quán)限,保證用戶只能進(jìn)行授權(quán)的訪問。目前,一些大型數(shù)據(jù)庫(如Oracle 等)都采用了基于角色的訪問控制機(jī)制,即為用戶授予不同的角色,如db—owner,security administrator 等,不同的角色允許對(duì)數(shù)據(jù)庫執(zhí)行不同的操作。

數(shù)據(jù)庫加密:用戶認(rèn)證以及訪問控制對(duì)訪問數(shù)據(jù)庫進(jìn)行了控制,但攻擊者可能會(huì)利用操作系統(tǒng)或數(shù)據(jù)庫漏洞,或物理接觸計(jì)算機(jī),而直接接觸數(shù)據(jù)庫系統(tǒng)文件,從而可能繞過身份認(rèn)證和存取控制而直接竊取或篡改數(shù)據(jù)庫內(nèi)容。對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行加密是防范這類威脅的有效手段。

數(shù)據(jù)庫操作審計(jì):監(jiān)視和記錄用戶對(duì)數(shù)據(jù)庫所做的各種操作的安全機(jī)制,它記錄并存儲(chǔ)用戶的操作,用于事后分析,以檢查導(dǎo)致數(shù)據(jù)庫現(xiàn)狀的原因以及提供追蹤攻擊者的線索。數(shù)據(jù)庫的備份與恢復(fù):當(dāng)數(shù)據(jù)庫發(fā)生不可恢復(fù)的故障時(shí),可以將數(shù)據(jù)庫恢復(fù)到先前的某個(gè)一致性的狀態(tài)。

四、SQLite 加密

由于SQLite 是開放源碼的,并且在其源碼中預(yù)留了加密接口,我們可以通過實(shí)現(xiàn)其預(yù)留的加密接口實(shí)現(xiàn)口令認(rèn)證和數(shù)據(jù)庫加密以完善其加密機(jī)制。

1.口令認(rèn)證

SQLite 數(shù)據(jù)庫文件是一個(gè)普通文本文件,對(duì)它的訪問首先依賴于文件的訪問控制。在此基礎(chǔ)上,再增加進(jìn)一步的口令認(rèn)證,即在訪問數(shù)據(jù)庫時(shí)必須提供正確的口令,如果通過認(rèn)證就可以對(duì)數(shù)據(jù)庫執(zhí)行創(chuàng)建、查詢、修改、插入、刪除和修改等操作;否則,不允許進(jìn)一步的訪問。

2.數(shù)據(jù)庫加密

數(shù)據(jù)庫加密有兩種方式:
1)在數(shù)據(jù)庫管理系(Data Base Management System,DBMS)中實(shí)現(xiàn)加密功能,即在從數(shù)據(jù)庫中讀數(shù)據(jù)和向數(shù)據(jù)庫中寫數(shù)據(jù)時(shí)執(zhí)行加解密操作;
2)應(yīng)用層加密,即在應(yīng)用程序中對(duì)數(shù)據(jù)庫的某些字段的值進(jìn)行加密,DBMS 管理的是加密后的密文。
前者與DBMS 結(jié)合好,加密方式對(duì)用戶透明,但增加了DBMS 的負(fù)載,并且需要修改DBMS的原始代碼;后者則需要應(yīng)用程序在寫入數(shù)據(jù)前加密,在讀出數(shù)據(jù)后解密,因而會(huì)增大應(yīng)用程序的負(fù)載。在此,通過實(shí)現(xiàn)SQLite 源碼中預(yù)留的加密接口,實(shí)現(xiàn)DBMS 級(jí)的加密。

3.使用xxx-tea 算法加密SQLite 數(shù)據(jù)庫

微型加密算法(TEA)及其相關(guān)變種(XTEA,Block TEA,XXTEA) 都是分組加密算法,它們很容易被描述,實(shí)現(xiàn)也很簡單(典型的幾行代碼)。

TEA 算法最初是由劍橋計(jì)算機(jī)實(shí)驗(yàn)室的 David Wheeler 和 Roger Needham在 1994 年設(shè)計(jì)的。該算法使用 128 位的密鑰為 64 位的信息塊進(jìn)行加密,它需要進(jìn)行 64 輪迭代,盡管作者認(rèn)為 32 輪已經(jīng)足夠了。該算法使用了一個(gè)神秘常數(shù)δ作為倍數(shù),它來源于黃金比率,以保證每一輪加密都不相同。但δ的精確值似乎并不重要,這里 TEA 把它定義為 δ=「(√5 - 1)231」(也就是程序中的 0×9E3779B9)。

之后 TEA 算法被發(fā)現(xiàn)存在缺陷,作為回應(yīng),設(shè)計(jì)者提出了一個(gè) TEA 的升級(jí)版本——XTEA(有時(shí)也被稱為“tean”)。XTEA 跟 TEA 使用了相同的簡單運(yùn)算,但它采用了截然不同的順序,為了阻止密鑰表攻擊,四個(gè)子密鑰(在加密過程中,原 128 位的密鑰被拆分為 4 個(gè) 32 位的子密鑰)采用了一種不太正規(guī)的方式進(jìn)行混合,但速度更慢了。

在跟描述 XTEA 算法的同一份報(bào)告中,還介紹了另外一種被稱為 Block TEA 算法的變種,它可以對(duì) 32 位大小任意倍數(shù)的變量塊進(jìn)行操作。該算法將 XTEA 輪循函數(shù)依次應(yīng)用于塊中的每個(gè)字,并且將它附加于它的鄰字。該操作重復(fù)多少輪依賴于塊的大小,但至少需要 6 輪。該方法的優(yōu)勢在于它無需操作模式(CBC,OFB,CFB 等),密鑰可直接用于信息。對(duì)于長的信息它可能比 XTEA 更有效率。

在 1998 年,Markku-JuhaniSaarinen 給出了一個(gè)可有效攻擊 Block TEA 算法的代碼,但之后很快 David J. Wheeler 和 Roger M.Needham 就給出了 Block TEA 算法的修訂版,這個(gè)算法被稱為 XXTEA。XXTEA 使用跟 Block TEA 相似的結(jié)構(gòu),但在處理塊中每個(gè)字時(shí)利用了相鄰字。它利用一個(gè)更復(fù)雜的 MX 函數(shù)代替了 XTEA 輪循函數(shù),MX 使用 2 個(gè)輸入量。

責(zé)任編輯:閆佳明 來源: iteye
相關(guān)推薦

2011-07-07 16:42:38

iPhone Sqlite3 數(shù)據(jù)庫

2012-03-06 09:50:24

Android SQLAndroidSQLite3

2013-04-09 16:47:19

iOS嵌入式數(shù)據(jù)庫SQLit

2021-02-15 15:40:28

SQLite3數(shù)據(jù)庫

2024-02-19 00:00:00

SQLite3數(shù)據(jù)庫代碼

2012-03-06 12:59:11

iOS SQLite3iOSSQLite3

2020-07-31 08:07:54

Python開發(fā)數(shù)據(jù)庫

2019-08-12 11:40:48

數(shù)據(jù)庫SQLite3數(shù)據(jù)類型

2012-02-29 10:18:31

SQLite3Android

2013-05-03 13:42:20

iOS開發(fā)SQLite3存儲(chǔ)讀取

2011-03-03 13:13:51

DelphiSQLite加密

2011-07-04 18:02:29

QT Sqlite 數(shù)據(jù)庫

2012-03-06 10:17:45

iOS SQLite3iOSSQLite3

2017-10-26 12:37:24

Pythonsqlite3數(shù)據(jù)庫

2011-07-20 12:34:49

SQLite數(shù)據(jù)庫約束

2019-08-15 07:00:54

SQLite數(shù)據(jù)庫內(nèi)存數(shù)據(jù)庫

2020-09-17 09:40:20

數(shù)據(jù)庫Sqlite3命令

2017-07-12 09:20:42

SQLite數(shù)據(jù)庫移植

2013-06-14 09:54:04

Unity3D

2011-08-01 13:32:07

Objective-C Sqlite3 框架
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)