摘 要:隨著智能手機的普及,越來越多的人將私人信息保存在手機中,因而手機中的信息安全越發(fā)受到人們的關(guān)注。本文首先分析了當前智能手機信息安全面臨的問題,介紹了保證信息安全常用的方法,接著闡述了Android系統(tǒng)的結(jié)構(gòu)及各個組成部分,進一步討論了常用的幾種加密算法。在此基礎(chǔ)上,采用eclipse集成環(huán)境、Java程序設(shè)計語言,設(shè)計并實現(xiàn)了一個基于Android平臺的文件加密系統(tǒng),系統(tǒng)總體分為三個模塊:文件瀏覽模塊、文件加密模塊以及文件解密模塊,在加密模塊中提供了多種加密算法對文件進行加密,在解密模塊中簡化了用戶操作,提高了方便性。最后通過實際的應(yīng)用開發(fā)驗證了系統(tǒng)的可行性和安全性。
關(guān)鍵詞:Android;文件加密系統(tǒng);加密算法;Java
中圖分類號:TN929.53
當前,手機已經(jīng)進入了智能化的時代,人們對手機的使用已經(jīng)從基本的通話功能到利用手機進行移動辦公、移動電子商務(wù)、移動支付、手機娛樂等,顯然,手機已經(jīng)成為了部分代替電腦的一個智能化的個人移動信息終端。隨著手機與人們的生活日益密切,許多人將一些私人信息存放在手機的SD卡中,比如,重要的聯(lián)系人信息,手機拍攝的一些私人照片等,然而手機一旦丟失,則會導(dǎo)致大量的私人信息被泄露。同時,人們使用手機上網(wǎng),下載應(yīng)用程序時,也會收到病毒、木馬的攻擊導(dǎo)致信息的安全性受到威脅[1,2]。為了保證數(shù)據(jù)文件的保密性和完整性,人們提出了多種加密算法,利用加密算法開發(fā)加密系統(tǒng)實現(xiàn)對數(shù)據(jù)文件的保護[3,4],然而,針對Android平臺的文件加密系統(tǒng)的研究并不多見。
本文基于Android平臺設(shè)計了一個文件加密系統(tǒng),提供多種經(jīng)典的加密算法如DES、DESede以及AES等算法,供用戶選擇使用,文件加密時可以針對不同的文件類型選擇不同的加密算法,解密時無需記住加密的算法,增強了文件的保密性和簡化了用戶操作。
1 Android平臺
Android是谷歌(Google)發(fā)布的一個開放源代碼的手機平臺,由Linux內(nèi)核、中間件、應(yīng)用程序框架和應(yīng)用軟件四個部分組成[5]。(1)Linux內(nèi)核,提供由操作系統(tǒng)內(nèi)核管理的底層基礎(chǔ)功能;(2)中間件,由函數(shù)庫和Anroid運行時構(gòu)成;(3)應(yīng)用程序框架,提供Anroid平臺基本的管理功能和組件重要機制;(4)應(yīng)用軟件,提供了一些核心的應(yīng)用程序。開發(fā)人員可以使用Android提供的類庫開發(fā)自己的應(yīng)用程序。
2 相關(guān)加密算法
根據(jù)密鑰類型的不同,加密算法一般分為兩類:對稱加密算法和非對稱加密算法[6]。在對稱加密算法中,數(shù)據(jù)加密和解密采用的都是同一個密鑰,優(yōu)點是加密和解密速度快,加密強度高,但其安全性依賴所持密鑰的安全性[7],常見的算法有DES、3DES、AES等。非對稱加密算法使用兩把不同但又完全匹配的一對鑰匙,公鑰和私鑰,使用公鑰加密但使用私鑰解密,常見的算法有RSA、DSA等。
文中所設(shè)計的加密系統(tǒng)采用對稱加密算法DES,DESede(3DES)和AES算法。(1)DES算法,DES算法是使用最廣泛的加密算法,使用一個56為的密鑰以及附加的8位奇偶校驗位,分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法;(2)DESede算法,DESede是由DES對稱加密算法改進后的一種對稱加密算法,它使用3條56位的密鑰對數(shù)據(jù)進行三次加密,比DES更加安全。(3)AES算法,AES算法是DES算法的替代方案,它的加密數(shù)據(jù)塊分組長度必須為128比特,密鑰長度的最少支持為128、192、256位。
3 文件加密系統(tǒng)的設(shè)計
3.1 系統(tǒng)的框架
系統(tǒng)總框架分為三大模塊:SD卡瀏覽模塊、文件加密模塊以及文件解密模塊,如圖1所示。運行系統(tǒng)時,首先進入SD卡瀏覽模塊,使用ListView控件顯示SD卡根目錄中的文件及文件夾,如果是已加密文件則在列表項的右側(cè)顯示一個鎖的圖標如圖2所示,點擊已經(jīng)加密文件,則轉(zhuǎn)到解密模塊,點擊未加密的文件,則轉(zhuǎn)到加密模塊。點擊文件夾,則進入該文件夾中,同樣在ListView控件中顯示該文件夾中的文件及文件夾。
3.2 文件瀏覽模塊
文件瀏覽模塊將SD卡根目錄中的文件和文件夾顯示到ListView控件中,如果是文件則需要判斷該文件是否為已加密文件,如果是則需要顯示一個鎖的圖標。如何判斷一個文件是否是已加密文件,文中采取的方法是給文件加密時,在文件的頭部寫一個固定長度的加密標志,如大寫字母“E”,當文件瀏覽模塊掃描到文件時,讀取文件頭部,如果包含加密標志,則為已加密文件,需要顯示一個鎖的標志。加密文件的結(jié)構(gòu)見下文3.3節(jié)。
顯示圖標的具體做法是,首先采用自定義函數(shù)isDirectory()判斷文件對象為文件還是文件夾,分別顯示不同的圖標,如果是文件,則進行一步采用自定的函數(shù)isEnfile()判斷文件是否是加密文件,核心代碼如下所示:
if (files[i].isDirectory()){
listItem.put(\"icon\", R.drawable.folder);
} else {
listItem.put(\"icon\", R.drawable.file);
if(isEnfile(files[i]))
listItem.put(\"suo\", R.drawable.suo);
}
3.3 加密模塊
加密模塊的運行界面如圖3所示,可以在DES,DESede和AES三種加密算法中任選一種加密算法,然后在密碼框中和確認密碼框中,輸入兩次密碼,點擊“文件加密”按鈕完成對所選文件的加密。這里需要解決兩個問題,第一個問題,不同的加密算法中的密鑰長度是不一樣的,需要根據(jù)用戶輸入的密碼,針對不同的加密算法生成不同長度的密鑰。文中采用的方法是首先使用switch語句判斷用戶選擇的加密算法,然后根據(jù)不同的加密算法創(chuàng)建不同長度的字節(jié)數(shù)組,然后采用while循環(huán)將用戶所輸入的密碼循環(huán)填入所創(chuàng)建的字節(jié)數(shù)組,最后采用SecretKeySpec()函數(shù)根據(jù)字節(jié)數(shù)組和加密算法的名稱產(chǎn)生加密密鑰,產(chǎn)生密鑰的函數(shù)getKey()的核心代碼如下所示:
public static Key getKey(byte[] arrBTmp, String alg){
……
byte[] arrB;
switch(alg){
case \"DES\":
arrB = new byte[8];
break;
case \"DESede\":
arrB = new byte[24];
break;
default:
arrB = new byte[16];
break;
}
int i=0, j=0;
while(i < arrB.length){
if(j>arrBTmp.length-1){
j=0;
}
arrB[i] = arrBTmp[j];
i++;
j++;
}
Key key = new javax.crypto.spec.SecretKeySpec(arrB, alg);
return key;
}
第二個需要解決的問題是,加密時選擇某種加密算法,而解密時不需要提供加密時的算法,這需要在加密時記住加密算法,本文的解決方法是,將DES,DESede和AES三種加密算法分別用1、2和3這三個數(shù)字表示,在加密文件時,將算法對應(yīng)的數(shù)字寫入到密文的頭部,加密文件的格式如圖4所示,其中文件頭部的加密標志用來瀏覽文件時判別是否為已加密文件,加密標志長度固定用字母“E”標志已經(jīng)加密,文件內(nèi)容為密文。
得到密鑰后,首先創(chuàng)建一個新的文件,文件名與原文件相同但后綴名為.lock,接著將密文的文件頭寫入文件,然后從原文件讀出二進制流,加密后寫入加密文件。加密時需要使用加密算法的名稱創(chuàng)建Cipher類的對象[8],并通過加密模式和密鑰初始化該對象,最后調(diào)用該對象的doFinal()函數(shù)對讀取的文件內(nèi)容進行加密。
3.4 解密模塊
當在瀏覽界面中點擊某一已加密文件時,轉(zhuǎn)到解密模塊,首先讀取加密文件頭部中的算法標志,得到加密時的加密算法,然后獲取用戶在解密界面中輸入的密碼,最后調(diào)用產(chǎn)生密鑰的自定義函數(shù)getKey()獲取密鑰(與加密時調(diào)用getKey()函數(shù)相同),只要用戶輸入的密碼與加密時相同,則得到相同的密鑰解密密文,解密時同樣需要創(chuàng)建Cipher類的對象,只不過初始化的模式為:DECRYPT_MODE,最終將解密得到的文件內(nèi)容寫入新的文件中。解密模塊的核心代碼如下:
String r=1;
Key key = getKey(strKey.getBytes(),alg);
Cipher c;
c = Cipher.getInstance(alg);
c.init(Cipher.DECRYPT_MODE,key);
byte[] clearByte=c.doFinal(code);
r=new String(clearByte);
4 結(jié)束語
文中詳細分析了幾種不同的文件加密算法,并基于Android平臺,采用Eclipse集成開發(fā)環(huán)境,Java程序設(shè)計語言,設(shè)計并實現(xiàn)了一個文件加密系統(tǒng),詳細介紹了文件加密系統(tǒng)各個組成部分的設(shè)計與實現(xiàn),系統(tǒng)可以使用不同的加密算法對文件進行加密,且解密時無需記住加密時采用的加密算法,通過實際的項目驗證了系統(tǒng)的可行性和安全性。隨著智能手機的普及,手機文件加密系統(tǒng)的應(yīng)用前景將更加廣泛。
參考文獻:
[1]王偉,張之棟,雷雨詩.基于策略的Android應(yīng)用檢測系統(tǒng)[J].信息網(wǎng)略安全,2013(02):30-34.
[2]李國,篙培培.基于Android平臺的入侵檢測系統(tǒng)的研究與實現(xiàn)[J].信息網(wǎng)略安全,2013(02):27-29.
[3]梅凱珍,李永忠.基于過濾驅(qū)動的局域網(wǎng)透明文件安全加密方法[J].計算機技術(shù)與發(fā)展,2012,22(4):238-241.
[4]唐曉東,付松齡,何連躍.基于eCryptfs的多用戶加密文件系統(tǒng)設(shè)計與實現(xiàn)[J].計算機應(yīng)用,2010,30(5):1236-1238.
[5]韓超,梁泉.Android系統(tǒng)原理及開發(fā)要點詳解[M].北京:電子工業(yè)出版社,2010.
[6]吳強.加密與解密[M].北京:企業(yè)管理出版社,2009.
[7]胡宏銀,何成萬.支持多種安全級別的文件加密工具設(shè)計[J].計算機工程與設(shè)計,2011,32(8):2569-2591.
[8]Ed Burnette著,田俊靜,張波等譯.Android基礎(chǔ)教程[M].北京:人民郵電出版社,2010.