汪坤
(沈陽化工大學 遼寧省沈陽市 110000)
如今Android手機已經是人們生活中必不可少的移動設備,作為一款嵌入式數據庫,SQLite在其數據存儲方面發揮了巨大作用,幾乎所有的軟件App都離不開SQLite數據庫保存用戶關鍵數據,SQLite數據庫用來作為Android平臺本地存儲的主要方式,其安全性的強弱顯得尤為重要[1],但其本身卻沒有很好的加密措施,任意使用者在獲取數據庫文件后就能夠明文查看信息。本人在開發本校留學生管理App過程中有許多需要通過網絡傳輸的信息提供給學生,并使用SQLite保存學生信息,因此數據的安全保密工作成為了最為重要的一個環節,故此研究并設計Android系統下的數據庫保密措施,目的能夠解決學生信息的存儲安全問題。
SQLite數據庫基于嵌入式系統,它是一個輕量級的關系數據庫數據庫,故此大家都稱之為“袖珍型數據庫”,其廣泛的用于移動嵌入式系統中,是開源的、輕量級的、與操作系統毫無關系。它的設計初衷在于占用極小的資源,發揮最大的作用價值。在移動設備中它可能只需要僅僅數百KB即可存儲用戶所需的所有信息,存儲最大值盡然能夠達到2TB。在Android系統下,還可以通過封裝的API執行讀取和存儲操作。SQLite支持NULL(空置),INTERGER(整形),REAL(浮點型),TEXT(字符串文本型)和BLOB(二進制對象型)數據類型。表面上它僅支持這五種數據類型的存儲,但對于諸如Varchar,Char,Decimal等之類的數據類型,它也可以通過轉換類型成為接收對象,并以單個文件的形式進行存儲。因此,SQLite的最大特點是它可以通過轉換將任何類型的數據保存到任何字段中也稱‘動態存儲’。另外,盡管它很袖珍,但由于它是基于嵌入式的數據庫,其受支持的SQL語句并不遜色于其他開源數據庫,甚至在某些方面遠勝于傳統數據庫,它的發展前景更是一片大好。
(1)Android提供SQLiteOpenHelper.java抽象類,使用它必須先寫一個類繼承它。
public class DatabaseHelper extends SQLiteOpenHelper{}
(2)然后再寫一個帶全部參數的DatabaseHelper類的構造函數。
public DatabaseHelper(Context context,String name,CursorFactory factory,int version) {super(context,name,factory,version); }
(3)再寫兩個繼承于抽象類SQLiteOpenHelper中抽象方法:onCreate和onUpgrade方法。


圖1:test01數據庫表

圖2:MD5算法流程

(4)然后就可在主方法寫入增刪改查操作,SQLite專門提供了此類Content Value。
如圖1所示,以下實驗本人在Win10系統下,使用MI3真機,4.4.4KTU84P的Android版本下進行。首先在Android平臺下創建了一個TEST.db的數據庫,表名為test01,具體如下:
CREATE TABLE test01 (id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(50),password varchar(50))
在以下測試對學生的密碼進行加密實驗,設置初始密碼為“123456”。

表1:RSA算法原理

表2:加密比較

圖3:MD5加密結果

圖4:SHA加密結果

圖5:AES流程

圖6:AES加密結果

圖7:RSA加密結果
MD5(Message-Digest Algorithm)也稱為是消息-概要算法,MD5在市面上主要是用來確保信息在傳輸過程中的完整性和可靠性。MD5的作用是允許在使用數字簽名軟件對私鑰進行簽名之前將大容量信息“壓縮”為機密格式(即將任意長度的字節字符串轉換為一定長度的十六進制數字字符串)。MD5可以說是現如今計算機網絡中比較普遍使用的哈希算法(也叫散列算法)了,它是一種單向加密的過程,只能加密,不能解密(目前市面上非法的暴力破解法還是存在能夠破解的現象)。它的主要處理過程是把消息經過一系列的運算操作都可以轉化為另一固定長度的值。其主要流程有三步:第一步數據填充,第二部添加消息長度,第三步進行數據處理。也就是不管你的消息是什么樣子,它必能夠將此消息運算成為一個定值,然后存到數據庫保存或發送。其運算流程如圖2所示。
MD算法具有以下特性,易于計算:運算流程清晰,思路明確,使用運算流程很容易從原始數據計算MD5值。不可修改性:對原始信息數據的任何更改,乃至僅僅修改了一個字節,獲得的MD5值也大不相同。防偽造性:知道原始數據及其MD5值,很難找到具有相同MD5值的數據,難以做到偽數據。可壓縮性:任意不定長度的信息數據,經過一系列的運算所得出的MD5值的長度是固定的。強大的抗沖突性:無法找到兩個不同的數據共同擁有一個相同的MD5值。
對SQLite數據庫加密實驗結果如圖3所示。
SHA算法,安全哈希算法(Secure Hash Algorithm)主要適用于數字簽名標準(DSS)中定義的數字簽名算法(DSA)。其原理也就是在消息長度一定時,SHA會通過運算生成一段概述來表示這些信息數據,因此又叫消息摘要算法,該算法第一步是接收一段純文本,然后以不可逆轉的方式將其轉換為(通常較小的)密文文本,也可以簡單地理解為獲取一串輸入代碼(稱為預映射或信息),并將其轉換為較短的固定位輸出序列,輸出的序列值是散列函數也稱之為哈希值。哈希函數值可以說是明文的“引言”或“摘要”,因此哈希值的數字簽名可以視為明文的數字簽名。SHA和MD5是相似的,因為它們都是從MD派生的,它們的強度和其他特性是相似的,但是還有以下的區別:
(1)對暴力攻擊的安全性:最重要和最重要的區別是,SHA比MD5摘要更長。使用強制技術,生成其摘要等于給定摘要的任何消息的困難在于按MD5順序進行操作和按SHA順序進行操作。這樣,SHA可以抵抗強力攻擊。
(2)密碼分析的安全性:由于MD5的設計,它很容易受到密碼分析攻擊的攻擊。SHA-似乎不太容易受到此類攻擊。
(3)速度:在相同的硬件設備上,SHA的運行速度比MD5稍慢。對SQLite數據庫加密實驗結果如圖4所示。
AES(Advanced Encryption Standard)高級加密標準是一種塊加密標準。該標準用于代替原始DES(數據加密標準),該標準已被許多各方分析并在全球范圍內廣泛使用。替換DES的原因是DES使用56位密鑰并且更容易破解。AES可以使用128位,192位和256位密鑰,并使用128位塊對數據進行加密和解密,這是相對安全的。除非使用窮盡的方法列舉,否則理論上無法破解完美的加密算法。使用窮舉法來破解密鑰長度超過128位的加密數據是不現實的,只有理論上的可能性。據現有統計數據表明,即使使用世界上最快的計算機,耗盡128位密鑰也要花費數十億年,更不用說破解256位密鑰長度的AES算法了。AES在日常生活中應用比較廣泛因為其原理比較簡單易于操作,但是由于密鑰可能會被盜取,因此也存在一定安全性問題[2]。AES加密算法流程如圖5所示。
對SQLite數據庫加密結果如圖6所示。
RSA是最流行的非對稱加密算法之一,也稱為公共密鑰加密。RSA是非對稱加密的算法,也就是說,用于加密的密鑰和用于解密的密鑰是不同的。像DES一樣,RSA也是一種塊加密算法,區別在于可以根據密鑰的大小更改塊大小。如果加密數據不是數據包大小的整數倍,則將根據特定應用添加其他填充位。RSA作為一種非對稱加密算法,最重要的一個特性是當信息數據在網絡中傳輸時,用于加密數據的密鑰不需要與數據一起傳輸,單獨用戶進行留存,因此,這一過程極大降低了密鑰泄漏的可能性,也降低了信息數據泄露的風險性,用戶保存了私鑰也就保護了自己的隱私。此外,由于缺少解決大型數據得的有效方法,RSA生成的密鑰多的達到200多位,可以推測當前市面沒有破解RSA的有效方法。RSA優缺點在于它的安全性能不錯,任何用戶一方只需要保管一對密鑰就可以了,這是RSA的優點;但是它的計算復雜運算導致運行速度慢,對于大型數據加密起來比較吃力,這是比較大的缺點。
RSA算法基于的原理流程就是一方獲得消息并提取摘要,通過本地私鑰加密形成簽名密文s,將消息密文及消息通過另一方的公鑰加密生成另一段密文c發送給另一方,另一方使用自己的私鑰解密c得到與消息,再使用自己得公鑰解密得到一個摘要H,并和自己得到的消息取到得摘要h進行比對,若一致則加密解密通過,傳送完成。其具體運算流程有如表1所示。
對SQLite數據庫實現加密結果如圖7所示。
以上四種加密方法分析以及再Android設備上進行編程實驗并測得耗時進行對比,如表2所示。
MD5和SHA加密算法是散列的單向加密,其過程是不可逆的,可以用于身份驗證,可是用來保存數據的話,雖然加密耗時極短,但是不能夠很好的讀取到用戶信息,因此不適合在移動平臺上保存數據,但可以考慮在本人APP設計中登陸模塊上使用進行數據比對,達到成功登陸的目的且耗時最短。RSA是如今比較普遍應用的加密方法了,其安全性也是相當高,但是從實驗來看,其加密耗時偏高,在移動平臺上考慮到可能會影響用戶的舒適感,因從在本人的APP開發中,選擇相對比較安全的AES加密算法用來對Android數據庫加密才是最適合的。