汪坤
(沈陽化工大學(xué) 遼寧省沈陽市 110000)
如今Android手機(jī)已經(jīng)是人們生活中必不可少的移動設(shè)備,作為一款嵌入式數(shù)據(jù)庫,SQLite在其數(shù)據(jù)存儲方面發(fā)揮了巨大作用,幾乎所有的軟件App都離不開SQLite數(shù)據(jù)庫保存用戶關(guān)鍵數(shù)據(jù),SQLite數(shù)據(jù)庫用來作為Android平臺本地存儲的主要方式,其安全性的強(qiáng)弱顯得尤為重要[1],但其本身卻沒有很好的加密措施,任意使用者在獲取數(shù)據(jù)庫文件后就能夠明文查看信息。本人在開發(fā)本校留學(xué)生管理App過程中有許多需要通過網(wǎng)絡(luò)傳輸?shù)男畔⑻峁┙o學(xué)生,并使用SQLite保存學(xué)生信息,因此數(shù)據(jù)的安全保密工作成為了最為重要的一個環(huán)節(jié),故此研究并設(shè)計Android系統(tǒng)下的數(shù)據(jù)庫保密措施,目的能夠解決學(xué)生信息的存儲安全問題。
SQLite數(shù)據(jù)庫基于嵌入式系統(tǒng),它是一個輕量級的關(guān)系數(shù)據(jù)庫數(shù)據(jù)庫,故此大家都稱之為“袖珍型數(shù)據(jù)庫”,其廣泛的用于移動嵌入式系統(tǒng)中,是開源的、輕量級的、與操作系統(tǒng)毫無關(guān)系。它的設(shè)計初衷在于占用極小的資源,發(fā)揮最大的作用價值。在移動設(shè)備中它可能只需要僅僅數(shù)百KB即可存儲用戶所需的所有信息,存儲最大值盡然能夠達(dá)到2TB。在Android系統(tǒng)下,還可以通過封裝的API執(zhí)行讀取和存儲操作。SQLite支持NULL(空置),INTERGER(整形),REAL(浮點(diǎn)型),TEXT(字符串文本型)和BLOB(二進(jìn)制對象型)數(shù)據(jù)類型。表面上它僅支持這五種數(shù)據(jù)類型的存儲,但對于諸如Varchar,Char,Decimal等之類的數(shù)據(jù)類型,它也可以通過轉(zhuǎn)換類型成為接收對象,并以單個文件的形式進(jìn)行存儲。因此,SQLite的最大特點(diǎn)是它可以通過轉(zhuǎn)換將任何類型的數(shù)據(jù)保存到任何字段中也稱‘動態(tài)存儲’。另外,盡管它很袖珍,但由于它是基于嵌入式的數(shù)據(jù)庫,其受支持的SQL語句并不遜色于其他開源數(shù)據(jù)庫,甚至在某些方面遠(yuǎn)勝于傳統(tǒng)數(shù)據(jù)庫,它的發(fā)展前景更是一片大好。
(1)Android提供SQLiteOpenHelper.java抽象類,使用它必須先寫一個類繼承它。
public class DatabaseHelper extends SQLiteOpenHelper{}
(2)然后再寫一個帶全部參數(shù)的DatabaseHelper類的構(gòu)造函數(shù)。
public DatabaseHelper(Context context,String name,CursorFactory factory,int version) {super(context,name,factory,version); }
(3)再寫兩個繼承于抽象類SQLiteOpenHelper中抽象方法:onCreate和onUpgrade方法。
圖1:test01數(shù)據(jù)庫表
圖2:MD5算法流程
(4)然后就可在主方法寫入增刪改查操作,SQLite專門提供了此類Content Value。
如圖1所示,以下實(shí)驗本人在Win10系統(tǒng)下,使用MI3真機(jī),4.4.4KTU84P的Android版本下進(jìn)行。首先在Android平臺下創(chuàng)建了一個TEST.db的數(shù)據(jù)庫,表名為test01,具體如下:
CREATE TABLE test01 (id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(50),password varchar(50))
在以下測試對學(xué)生的密碼進(jìn)行加密實(shí)驗,設(shè)置初始密碼為“123456”。
表1:RSA算法原理
表2:加密比較
圖3:MD5加密結(jié)果
圖4:SHA加密結(jié)果
圖5:AES流程
圖6:AES加密結(jié)果
圖7:RSA加密結(jié)果
MD5(Message-Digest Algorithm)也稱為是消息-概要算法,MD5在市面上主要是用來確保信息在傳輸過程中的完整性和可靠性。MD5的作用是允許在使用數(shù)字簽名軟件對私鑰進(jìn)行簽名之前將大容量信息“壓縮”為機(jī)密格式(即將任意長度的字節(jié)字符串轉(zhuǎn)換為一定長度的十六進(jìn)制數(shù)字字符串)。MD5可以說是現(xiàn)如今計算機(jī)網(wǎng)絡(luò)中比較普遍使用的哈希算法(也叫散列算法)了,它是一種單向加密的過程,只能加密,不能解密(目前市面上非法的暴力破解法還是存在能夠破解的現(xiàn)象)。它的主要處理過程是把消息經(jīng)過一系列的運(yùn)算操作都可以轉(zhuǎn)化為另一固定長度的值。其主要流程有三步:第一步數(shù)據(jù)填充,第二部添加消息長度,第三步進(jìn)行數(shù)據(jù)處理。也就是不管你的消息是什么樣子,它必能夠?qū)⒋讼⑦\(yùn)算成為一個定值,然后存到數(shù)據(jù)庫保存或發(fā)送。其運(yùn)算流程如圖2所示。
MD算法具有以下特性,易于計算:運(yùn)算流程清晰,思路明確,使用運(yùn)算流程很容易從原始數(shù)據(jù)計算MD5值。不可修改性:對原始信息數(shù)據(jù)的任何更改,乃至僅僅修改了一個字節(jié),獲得的MD5值也大不相同。防偽造性:知道原始數(shù)據(jù)及其MD5值,很難找到具有相同MD5值的數(shù)據(jù),難以做到偽數(shù)據(jù)??蓧嚎s性:任意不定長度的信息數(shù)據(jù),經(jīng)過一系列的運(yùn)算所得出的MD5值的長度是固定的。強(qiáng)大的抗沖突性:無法找到兩個不同的數(shù)據(jù)共同擁有一個相同的MD5值。
對SQLite數(shù)據(jù)庫加密實(shí)驗結(jié)果如圖3所示。
SHA算法,安全哈希算法(Secure Hash Algorithm)主要適用于數(shù)字簽名標(biāo)準(zhǔn)(DSS)中定義的數(shù)字簽名算法(DSA)。其原理也就是在消息長度一定時,SHA會通過運(yùn)算生成一段概述來表示這些信息數(shù)據(jù),因此又叫消息摘要算法,該算法第一步是接收一段純文本,然后以不可逆轉(zhuǎn)的方式將其轉(zhuǎn)換為(通常較小的)密文文本,也可以簡單地理解為獲取一串輸入代碼(稱為預(yù)映射或信息),并將其轉(zhuǎn)換為較短的固定位輸出序列,輸出的序列值是散列函數(shù)也稱之為哈希值。哈希函數(shù)值可以說是明文的“引言”或“摘要”,因此哈希值的數(shù)字簽名可以視為明文的數(shù)字簽名。SHA和MD5是相似的,因為它們都是從MD派生的,它們的強(qiáng)度和其他特性是相似的,但是還有以下的區(qū)別:
(1)對暴力攻擊的安全性:最重要和最重要的區(qū)別是,SHA比MD5摘要更長。使用強(qiáng)制技術(shù),生成其摘要等于給定摘要的任何消息的困難在于按MD5順序進(jìn)行操作和按SHA順序進(jìn)行操作。這樣,SHA可以抵抗強(qiáng)力攻擊。
(2)密碼分析的安全性:由于MD5的設(shè)計,它很容易受到密碼分析攻擊的攻擊。SHA-似乎不太容易受到此類攻擊。
(3)速度:在相同的硬件設(shè)備上,SHA的運(yùn)行速度比MD5稍慢。對SQLite數(shù)據(jù)庫加密實(shí)驗結(jié)果如圖4所示。
AES(Advanced Encryption Standard)高級加密標(biāo)準(zhǔn)是一種塊加密標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)用于代替原始DES(數(shù)據(jù)加密標(biāo)準(zhǔn)),該標(biāo)準(zhǔn)已被許多各方分析并在全球范圍內(nèi)廣泛使用。替換DES的原因是DES使用56位密鑰并且更容易破解。AES可以使用128位,192位和256位密鑰,并使用128位塊對數(shù)據(jù)進(jìn)行加密和解密,這是相對安全的。除非使用窮盡的方法列舉,否則理論上無法破解完美的加密算法。使用窮舉法來破解密鑰長度超過128位的加密數(shù)據(jù)是不現(xiàn)實(shí)的,只有理論上的可能性。據(jù)現(xiàn)有統(tǒng)計數(shù)據(jù)表明,即使使用世界上最快的計算機(jī),耗盡128位密鑰也要花費(fèi)數(shù)十億年,更不用說破解256位密鑰長度的AES算法了。AES在日常生活中應(yīng)用比較廣泛因為其原理比較簡單易于操作,但是由于密鑰可能會被盜取,因此也存在一定安全性問題[2]。AES加密算法流程如圖5所示。
對SQLite數(shù)據(jù)庫加密結(jié)果如圖6所示。
RSA是最流行的非對稱加密算法之一,也稱為公共密鑰加密。RSA是非對稱加密的算法,也就是說,用于加密的密鑰和用于解密的密鑰是不同的。像DES一樣,RSA也是一種塊加密算法,區(qū)別在于可以根據(jù)密鑰的大小更改塊大小。如果加密數(shù)據(jù)不是數(shù)據(jù)包大小的整數(shù)倍,則將根據(jù)特定應(yīng)用添加其他填充位。RSA作為一種非對稱加密算法,最重要的一個特性是當(dāng)信息數(shù)據(jù)在網(wǎng)絡(luò)中傳輸時,用于加密數(shù)據(jù)的密鑰不需要與數(shù)據(jù)一起傳輸,單獨(dú)用戶進(jìn)行留存,因此,這一過程極大降低了密鑰泄漏的可能性,也降低了信息數(shù)據(jù)泄露的風(fēng)險性,用戶保存了私鑰也就保護(hù)了自己的隱私。此外,由于缺少解決大型數(shù)據(jù)得的有效方法,RSA生成的密鑰多的達(dá)到200多位,可以推測當(dāng)前市面沒有破解RSA的有效方法。RSA優(yōu)缺點(diǎn)在于它的安全性能不錯,任何用戶一方只需要保管一對密鑰就可以了,這是RSA的優(yōu)點(diǎn);但是它的計算復(fù)雜運(yùn)算導(dǎo)致運(yùn)行速度慢,對于大型數(shù)據(jù)加密起來比較吃力,這是比較大的缺點(diǎn)。
RSA算法基于的原理流程就是一方獲得消息并提取摘要,通過本地私鑰加密形成簽名密文s,將消息密文及消息通過另一方的公鑰加密生成另一段密文c發(fā)送給另一方,另一方使用自己的私鑰解密c得到與消息,再使用自己得公鑰解密得到一個摘要H,并和自己得到的消息取到得摘要h進(jìn)行比對,若一致則加密解密通過,傳送完成。其具體運(yùn)算流程有如表1所示。
對SQLite數(shù)據(jù)庫實(shí)現(xiàn)加密結(jié)果如圖7所示。
以上四種加密方法分析以及再Android設(shè)備上進(jìn)行編程實(shí)驗并測得耗時進(jìn)行對比,如表2所示。
MD5和SHA加密算法是散列的單向加密,其過程是不可逆的,可以用于身份驗證,可是用來保存數(shù)據(jù)的話,雖然加密耗時極短,但是不能夠很好的讀取到用戶信息,因此不適合在移動平臺上保存數(shù)據(jù),但可以考慮在本人APP設(shè)計中登陸模塊上使用進(jìn)行數(shù)據(jù)比對,達(dá)到成功登陸的目的且耗時最短。RSA是如今比較普遍應(yīng)用的加密方法了,其安全性也是相當(dāng)高,但是從實(shí)驗來看,其加密耗時偏高,在移動平臺上考慮到可能會影響用戶的舒適感,因從在本人的APP開發(fā)中,選擇相對比較安全的AES加密算法用來對Android數(shù)據(jù)庫加密才是最適合的。