android手機(jī)短信加密如何通過java語言實(shí)現(xiàn)

給手機(jī)短信加密可以保證信息不被非法竊取和篡改,而且只有合法接收方才能知道短信內(nèi)容,作為手機(jī)操作平臺(tái)之一的Android系統(tǒng)的用戶使用率相當(dāng)高,這一平臺(tái)以Linux為核心,可以使用Java作為編程語言來開發(fā)應(yīng)用程序,那么我們今天就來給大家介紹一下android手機(jī)短信加密是如何通過java語言實(shí)現(xiàn)的。

一、Android操作系統(tǒng)

Android系統(tǒng)于2007年在美國推出后,憑借其良好的用戶體驗(yàn)、低廉的成本和較高的開放性吸引著越來越多的終端廠商采用。Android系統(tǒng)架構(gòu)由五部分組成,分別是LinuxKernel、Android Runtime、Libraries、Application Framework和Applications。如圖1所示。

因本文所涉及的手機(jī)短信加密軟件為應(yīng)用層面,在此主要介紹Android Runtime和Applications版塊。

1、Android Runtime

Android包含一個(gè)核心庫的集合,提供大部分在Java編程語言核心類庫中可用的功能。每一個(gè)Android應(yīng)用程序是Dalvik虛擬機(jī)中的實(shí)例,運(yùn)行在他們自己的進(jìn)程中。Dalvik虛擬棚被設(shè)計(jì)成在一個(gè)設(shè)備可以高效地運(yùn)行多個(gè)虛揚(yáng)機(jī)實(shí)例。Dalvik虛擬機(jī)可執(zhí)行文件格式是.dex,dex格式是專為Dalvik設(shè)計(jì)的一種壓縮格式,超合內(nèi)存和處理器速度有限的系統(tǒng)。大多數(shù)虛揚(yáng)機(jī)包括JVM都是基于棧的,而Dalvik虛擬機(jī)則是基于寄存器的。兩種架構(gòu)各有優(yōu)劣,一般而言,基于棧的機(jī)器需要更多指令,而基于寄存器的秒器指令更大。Android系統(tǒng)提供了dx工具,可以將Java.class轉(zhuǎn)換成.dex格式。一個(gè)dex文件通常會(huì)有多個(gè).class。由于dex有時(shí)必須進(jìn)行最任化,會(huì)使文件大小增加1~4倍,以O(shè)DEX結(jié)尾。Dalvik虛擬機(jī)依賴于Linux內(nèi)核提供基本功能,如線程和底層內(nèi)存管理。

2、Applications

Android裝配一個(gè)核心應(yīng)用程序集合,包括電子郵件客戶端- SMS程序、日歷、地圖、瀏覽器、聯(lián)系人和其他設(shè)置。所有應(yīng)用程序都是用Java編程語言寫的。從上進(jìn)內(nèi)容可以清楚地知道Android的架構(gòu)是分層的,非常清晰,分工明確。Android本身是一套軟件堆迭(SoftwareStock),或稱為軟件迭層架構(gòu),迭層主要分成三層:操作系統(tǒng)、中間件、應(yīng)用程序。

二、Eclipse開發(fā)平臺(tái)簡(jiǎn)介

Eclipse是一種基于Java的可擴(kuò)展開源開發(fā)平臺(tái)。就其自身而雷,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括為人熟知的Java開發(fā)工具(Java Developme nlTools,JDT)。

雖然大多數(shù)用戶很樂于將Eclipse當(dāng)做Java集成開發(fā)環(huán)境(IDE)來使用,但Eclipse的目標(biāo)卻不僅限于此。Eclipse還包括插件開發(fā)研境(Plug-in Development Environment,HDE),這個(gè)組件主要針對(duì)希望擴(kuò)展Eclipse的軟件開發(fā)人員,因?yàn)樗试S他們構(gòu)建與Eclipse環(huán)境無縫集成的工具。由于Eclipse中的每樣?xùn)|西都是插件,對(duì)于給Eclipse提供插件,以及給用戶提取一致和統(tǒng)一的集成開發(fā)環(huán)境而雷,所有工具開發(fā)人員都具有同等的發(fā)揮場(chǎng)所。

這種平等和一致性并不僅限于Java開發(fā)工具。盡管Eclipse是使用Java語言開發(fā)的,但它的用途并不限于Java語言。例如,支持諸如C/C++和COBOL等編程語言的插件已經(jīng)可用,或預(yù)計(jì)將會(huì)推出o Eclipse框架還可用來作為與軟件開發(fā)無關(guān)的其他應(yīng)用程序類型的基礎(chǔ),比如內(nèi)容管理系統(tǒng)。

基于Echpse的應(yīng)用程序的突出例子是IBM&reg-Rational&reg、Software Architect,它構(gòu)成了IBM Java開發(fā)工具系列的基礎(chǔ)。

三、基于Java語言實(shí)現(xiàn)手機(jī)短信的3DES加密

1、DES加密算法流程

DES算法是IBM設(shè)計(jì)并于1977年被美國國家標(biāo)準(zhǔn)局采用的數(shù)據(jù)加密標(biāo)準(zhǔn),它通過循環(huán)和迭代將簡(jiǎn)單的基本運(yùn)算和變換構(gòu)造成數(shù)據(jù)流的非線性變換來實(shí)現(xiàn)對(duì)數(shù)據(jù)的加密保護(hù)。

作為一種對(duì)稱加密算法,DES利用56位的密鑰將64位的二進(jìn)制信息加密成64位的密文信息,加密后的信息可用加密時(shí)用的同一密鑰邊行求逆得到對(duì)應(yīng)的明文。DES算法的加密過程如圖2所示。

由圖2可知,在DES加密過程中,它的主體運(yùn)算由初始置換、乘積變換和逆初始置換組成。

(1)初始置換IP

初始置換方法就是將64位明文的位置按照一個(gè)固定的表的順序打亂,表中的數(shù)字代表64位明文的輸入順序號(hào),表中的位置代表置換后的輸出順序,其中表中的位置順序是先按行后按列進(jìn)行排序的。

(2)乘積變換(16輪迭代)

乘積變換部分要進(jìn)行16輪迭代,首先將初始置換得到的64位結(jié)果分為兩半,記為L0和Ro,各32位。對(duì)初始密鑰進(jìn)行密鑰擴(kuò)展,產(chǎn)生16個(gè)48位的子密鑰,記為K1,K2...,KL6,每輪迭代的邏輯關(guān)系為:

其中1<i<16,其一輪迭代過程如圖3所示。

乘積變換的核心是f變換,它是非線性的,是每輪實(shí)現(xiàn)混亂的最關(guān)鍵的模塊,其詳細(xì)變換過程即圖3中的虛線部分。具體為輸入32位,經(jīng)過擴(kuò)展變換變成48位,與子密鑰進(jìn)行異或運(yùn)算,選擇壓縮變換-S盒替換,將48位壓縮還原成32位,再進(jìn)行P盒替換,輸出32位。

(3)逆初始置換IP-1

逆初始置換IP-1與初始置換正好相反,它將通過16輪迭代后產(chǎn)生的64位比特信息按照另一個(gè)固定的表的順序打亂,最后輸出的64位信息即為密文信息。

2、3DES加密解密處理方案

由于DES算法存在密鑰位數(shù)和迭代次數(shù)偏少等問題,人們提出了多重DES來克服這些缺陷,其中3- DES為實(shí)際應(yīng)用中被廣泛采用阿方案。它有以下4種使用模式:

(1) DES-EEE3模式:使用三個(gè)不同密鑰(KL,K2,K3),采用三次加密算法;

(2) DES-EDE3模式:使用三個(gè)不同密鑰(KL,K2,K3),采用加密一解密一加密算法;

(3) DES-EEE2模式:使用兩個(gè)不同密鑰(KI=K3,K2),采用三次加密算法;

(4) DES-EDE2模式:使用兩個(gè)不同密鑰(KL=K3,K2),采用加密一解密一加密算法。

3DES將密鑰長度增加到112位或168位,抗窮舉的能力大大增強(qiáng),是目前仍被使用的加密算法。

一般來說,手機(jī)短信內(nèi)容較短,可以選用3DES算法進(jìn)行加密,本文選用其中一種模式作為手機(jī)短信加密解決方案。

3、Android的消息處理機(jī)制

基于Android系統(tǒng)的手機(jī)游戲程序開發(fā)過程,分析了Android系統(tǒng)的安全機(jī)制。下面著重介紹Android系統(tǒng)的消息處理機(jī)制,因?yàn)檫@是手機(jī)短信加密的基礎(chǔ)。

首先通過Handler發(fā)出一條消息,發(fā)至MessageQueue里,調(diào)用MessageQueue能enqu eueMessage函數(shù),enqueueMessage根據(jù)上面接收的Messag e隊(duì)列的構(gòu)造把接收到的Message放入隊(duì)列中。MessageQueue的removeMes sag es函數(shù)根據(jù)上面接收能Message隊(duì)列的構(gòu)造把接收到的Message膨隊(duì)列中刪除,并且調(diào)用對(duì)應(yīng)Messag e對(duì)象從recycle函數(shù)把不用的Message放入MessagelH001中。通過Loop從Message Queue中從前往后取出Message,然后通過Han dlerWdispat chMessage函數(shù)進(jìn)行消息的處理(可見消息的處理是Handler負(fù)責(zé)的)。消息處理完了以后通過Message對(duì)象的recycle函數(shù)放到MessagePo01中,以便下次使用,通過Po01的處理提供了一定的內(nèi)存管理從而加速消息對(duì)象的獲取。Pool如何處理取決于Handler如何定義(三個(gè)方法一一優(yōu)先級(jí)從高到低:fMessage里面的Callback,一個(gè)實(shí)現(xiàn)了Runnable接收的對(duì)象,其中run函數(shù)做處理工作;Handler里面的mCallback指向的一個(gè)實(shí)現(xiàn)了Callback接口的對(duì)象,里面的handleMessage進(jìn)行處理;處理消息Handler對(duì)象對(duì)應(yīng)的類繼承并實(shí)現(xiàn)了其中hand leMessage函數(shù),通過這個(gè)實(shí)現(xiàn)能handleMessage函數(shù)處理消息)。

大致流程就是Handlery發(fā)送Message→MessageQueue,Looper從MessageQueue中取出Message號(hào)觸發(fā)Handler的消息分發(fā)函數(shù)專調(diào)用Handler中定義的方法。

SMS是手機(jī)中經(jīng)常使用到的一個(gè)服務(wù)。然而當(dāng)手機(jī)接收到短信時(shí),也會(huì)向系統(tǒng)發(fā)途廣播o An droid中收到系統(tǒng)消息廣播后,需要從以下三個(gè)步驟處理這個(gè)系統(tǒng)消息廣播:

(1)接收系統(tǒng)消息廣播;

(2)處理系統(tǒng)消息廣播:

(3)把消息廣播里面的內(nèi)容顯示在Activity中。

通過SMSReceiver類接收系統(tǒng)廣播,在編寫SMSReceiver類的時(shí)候需要注意以下四點(diǎn):

(1)接收短信的Broadcast Action是android.provider.Tele phony,SMS_RECEIVED,因此,要在onReceiver方法的開始部分判斷接帳到的是否是接收短信的BroadcastAction。

(2)需要通過Bundle.get(“pdus”)來獲得接收到的短信息。這個(gè)方法返回了一個(gè)表示短信內(nèi)容的數(shù)組,每一個(gè)數(shù)組元素表示一條短信。這就意味著通過Bundle.get(“pdus”)可以返回多條系統(tǒng)接收到的短信內(nèi)容。

(3)通過Bundle.get(“pdus”)返回能數(shù)組一般不能直接使用,需要使用SmsM essage,creatFro mPdu方法將這這些數(shù)組元素轉(zhuǎn)換威SmsMessage對(duì)象才可以使用。每一個(gè)對(duì)象表示一條短信。

(4)通過SmsMessage類的get DisplayOriginating Address方法可以獲得發(fā)途短信的電話號(hào)碼,通過getDisplay Message Body辦法可以獲得短信的內(nèi)容。

軟件開發(fā)采用Java語言,利用Eclipse編程工具,以Android SDK開發(fā)包為基礎(chǔ)來實(shí)現(xiàn)SMS收發(fā)功能。

四、軟件運(yùn)行界面截圖

在Android虛擬手機(jī)開發(fā)平臺(tái)上,通過編寫短信加密解密程序,模擬實(shí)現(xiàn)該加解密程序在真實(shí)手機(jī)環(huán)境中的運(yùn)行效果。下面是該程序在手機(jī)虛擬平臺(tái)的運(yùn)行結(jié)果。

(1)打開手機(jī)連接電腦,在虛擬平臺(tái)上出現(xiàn)初始界面,如圖4所示。

(2)點(diǎn)擊圖4中“信息”進(jìn)入短信收發(fā)界面,如圖5-圖6所示。

(3)運(yùn)行J2MEMIDlet程序,直接點(diǎn)擊圖5下消息編輯條進(jìn)入短信編輯劫如圖7所示。選擇聯(lián)系人界面,在短信內(nèi)容編輯結(jié)束后進(jìn)行選擇產(chǎn)如圖8所示。

(4)目標(biāo)手機(jī)短信接收界面,可對(duì)剛接收的短信進(jìn)行編輯、解密等操作,具體按鈕如圖9所示。至此,雙方通信結(jié)束。

本軟件針對(duì)Android手機(jī)開發(fā),故只適用于Android手機(jī)用戶,很難直接移植到其他系統(tǒng)。在實(shí)際的軟件開發(fā)中,3DES的加密密鑰則由Java函數(shù)隨機(jī)生成,因此,用戶沒有直接輸入加密密鑰,在使用時(shí)跟普通的手機(jī)一樣。當(dāng)然,只有通信雙方的手機(jī)同時(shí)安裝加密軟件才具有正常的短信收發(fā)功能。

小知識(shí)之Android

Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦,由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。