馮益斌
摘 要: 近年來搭載Android系統(tǒng)的智能可穿戴設(shè)備發(fā)展迅速,藍牙通信技術(shù)廣泛地應(yīng)用在智能可穿戴設(shè)備中,使其能與手機之間相互通信,實現(xiàn)圖片、視頻、文件等數(shù)據(jù)傳送功能。研究基于Android系統(tǒng)的藍牙遠程控制功能,通過建立的藍牙連接,實現(xiàn)智能手表與手機之間的數(shù)據(jù)傳送,為了保障數(shù)據(jù)的安全性,對傳送的數(shù)據(jù)進行了混合加密。應(yīng)用程序運行在搭載Android系統(tǒng)的GEAR智能手表和手機上,實現(xiàn)了通過GEAR手表實時預(yù)覽手機攝像頭采集到的圖像,并且遠程控制手機拍攝照片的功能。
關(guān)鍵詞: 遠程控制; 藍牙; Android; 混合加密
中圖分類號: TN92?34; TM417 文獻標識碼: A 文章編號: 1004?373X(2016)05?0089?04
0 引 言
基于藍牙的遠程控制功能能夠使智能可穿戴設(shè)備更好地與手機相互配合起來。本文實現(xiàn)的遠程控制功能應(yīng)用于搭載Android系統(tǒng)的三星Gear智能手表與手機之間,通過發(fā)送自定義的藍牙數(shù)據(jù)結(jié)構(gòu),實現(xiàn)了對控制信息和數(shù)據(jù)信息的區(qū)分,能夠識別控制信息的類型,應(yīng)用于Gear手表與手機之間,通過相互連接之后,Gear手表能夠?qū)崟r預(yù)覽手機攝像頭獲取的數(shù)據(jù),并且能夠控制手機進行拍照。
然而考慮到安全性問題,藍牙數(shù)據(jù)在傳送的過程中容易被竊取[1],這將對用戶的隱私造成極大的威脅。因此,對藍牙數(shù)據(jù)進行加密也是尤為重要的。通過對加密算法的分析與研究,本文采用了混合加密算法。對于智能可穿戴設(shè)備這一類運算能力不是很強的設(shè)備,加密速度尤為重要,RC4加密算法在流加密上的優(yōu)勢,能夠滿足應(yīng)用的需求,然而其安全性并不是最好,通過截獲的數(shù)據(jù)容易分析出加密的秘鑰。因此采用RSA非對稱加密算法對RC4秘鑰進行再一次的加密,由于秘鑰信息比較短,加密算法的復(fù)雜度對加密速度的影響比較小,采用RSA安全度高的算法來保證RC4秘鑰信息不被直接讀取到更加重要[2]。
1 功能模塊劃分
Android應(yīng)用程序由四大基本組件Activity,Service 服務(wù),Content Provider內(nèi)容提供者和BroadcastReceiver 廣播接收器組成。四大組件通過相互之間的配合、數(shù)據(jù)傳送,實現(xiàn)了應(yīng)用程序的功能,完成了用戶與系統(tǒng)之間的交互,滿足了用戶的實際需求[3]。
基于藍牙的遠程控制功能研究是為了使搭載Android系統(tǒng)的智能可穿戴設(shè)備與手機之間實現(xiàn)遠程控制的功能。本研究要求創(chuàng)建Android應(yīng)用程序,實現(xiàn)智能手表遠程控制手機拍攝照片的功能。深入分析了基于藍牙的遠程控制功能的主要內(nèi)容,將研究的內(nèi)容劃分為以下3大模塊[4]:
(1) 藍牙通信模塊:通過對Android系統(tǒng)藍牙模塊的分析,調(diào)用AndroidSDK中的接口函數(shù),實現(xiàn)了設(shè)備之間通過藍牙協(xié)議來建立數(shù)據(jù)的連接,并且實現(xiàn)數(shù)據(jù)傳送的功能[5]。
(2) 遠程控制模塊:此模塊通過定義的數(shù)據(jù)包頭來區(qū)分發(fā)送數(shù)據(jù)的類型是數(shù)據(jù)信息還是控制信息,使得Android設(shè)備之間可以通過傳送數(shù)據(jù)信息和控制信息兩種信息類型,從而實現(xiàn)了基于藍牙的遠程控制功能。
(3) 數(shù)據(jù)加密模塊:此模塊實現(xiàn)了RC4加密算法與RSA加密算法相結(jié)合的混合加密算法,應(yīng)用于基于藍牙的遠程控制功能,保護了數(shù)據(jù)傳送的安全性。在3大模塊的基礎(chǔ)上,最終設(shè)計并實現(xiàn)了一個運行在Android系統(tǒng)上的應(yīng)用程序。應(yīng)用程序運行在GEAR手表和Android手機上,實現(xiàn)了手表與手機之間藍牙連接的建立,完成了通過遠程控制來拍攝照片的功能。
2 藍牙通信模塊設(shè)計與實現(xiàn)
2.1 藍牙協(xié)議數(shù)據(jù)傳輸
完整的藍牙協(xié)議棧根據(jù)各協(xié)議所處的位置可分三大類,分別是底層協(xié)議、中間層協(xié)議和高層協(xié)議。
藍牙底層協(xié)議實現(xiàn)了傳輸鏈路的建立,用于傳送藍牙信息數(shù)據(jù)流,是藍牙協(xié)議體系的基礎(chǔ)。藍牙底層協(xié)議包括藍牙射頻協(xié)議(RadioFrequencyProtocol)、鏈路管理協(xié)議(LinkManagerProtocol,LMP)、藍牙基帶協(xié)議(BaseBandProtocol)和主機控制器接口協(xié)議(HostControllerInterfaceProtocol,HCI)。藍牙射頻協(xié)議決定了藍牙通信的技術(shù)特點,使藍牙工作在免許可的2.4 GHz ISM頻段。藍牙基帶協(xié)議在藍牙協(xié)議棧中位于藍牙射頻層之上,是設(shè)備之間通過藍牙協(xié)議通信的關(guān)鍵程序,定義了微微網(wǎng)的創(chuàng)建過程以及如何通過藍牙相連接。
藍牙中間層協(xié)議的主要功能是數(shù)據(jù)幀的分解與重組、組提取、服務(wù)質(zhì)量控制等。中間層協(xié)議為上層應(yīng)用程序提供服務(wù),提供底層協(xié)議的接口。
藍牙高層協(xié)議包括對象交換協(xié)議(ObjectExchangeProtocol,OBEX)和無線應(yīng)用協(xié)議(WirelessApplicationProtocol,WAP)。對象交換協(xié)議屬于會話層協(xié)議,由紅外數(shù)據(jù)協(xié)會制定,主要用于紅外數(shù)據(jù)鏈路中數(shù)據(jù)對象的交換。使得基于紅外鏈路的應(yīng)用程序能夠方便地移植到藍牙協(xié)議上。
2.2 藍牙功能接口概述
通過調(diào)用藍牙協(xié)議棧接口,編寫應(yīng)用程序,從而實現(xiàn)藍牙通信功能,使得應(yīng)用程序能夠?qū)崿F(xiàn)藍牙設(shè)備的搜索、請求藍牙配對、建立RFCOMM通道、與其他設(shè)備相連接的功能。調(diào)用AndroidSDK提供的應(yīng)用編程接口,可以實現(xiàn)藍牙通信的基本功能,功能主要分為以下6大類:搜索藍牙設(shè)備;查詢本地藍牙適配器配對的藍牙設(shè)備;建立RFCOMM通道;通過服務(wù)發(fā)現(xiàn)并連接到其他設(shè)備;與其他設(shè)備之間傳輸數(shù)據(jù);管理多個連接[6]。
2.3 藍牙通信模塊的實現(xiàn)
通過對藍牙協(xié)議棧的分析,掌握了藍牙協(xié)議棧中各協(xié)議的主要功能,掌握了數(shù)據(jù)在藍牙通信過程中的傳送過程以及設(shè)備之間建立藍牙連接的完整步驟。通過對Android系統(tǒng)SDK提供的藍牙協(xié)議棧接口的學(xué)習(xí),掌握了基于Android系統(tǒng)開發(fā)藍牙通信模塊的基本步驟和實現(xiàn)方法。Android系統(tǒng)中藍牙通信模塊的實現(xiàn)主要包括4大部分:本機藍牙模塊的配置、藍牙設(shè)備的搜索、藍牙設(shè)備連接的建立和藍牙設(shè)備通信的實現(xiàn)。
2.3.1 本機藍牙模塊的配置
AndroidSDK提供了一個核心類BluetoothAdapter,通過創(chuàng)建BluetoothAdapter實例對象來配置本機藍牙模塊的相關(guān)屬性,在程序中的實現(xiàn)如下:
//實例化系統(tǒng) BluetoothAdapter 對象
BluetoothAdapter mAdapter = Bluetooth Adapter. get DefaultAdapter();
//直接打開系統(tǒng)的藍牙設(shè)置面板
Intent intent = new Intent (BluetoothAdapter.ACTION _REQUEST_ENABLE);
startActivityForResult(intent, 0x1);
2.3.2 藍牙設(shè)備的搜索
配置了本地的藍牙屬性,開啟藍牙功能之后,接下來調(diào)用 BluetoothAdapter. startDiscovery()實現(xiàn)搜索附近設(shè)備功能。
startDiscovery()方法是一個異步方法,調(diào)用后會立即返回。該方法對附近可見的藍牙設(shè)備進行搜索,該過程會持續(xù)12 s。當該方法被調(diào)用后,搜索過程在一個 System Service中完成,當搜索到需要連接的藍牙設(shè)備可以通過調(diào)用cancelDiscovery()方法來停止搜索。調(diào)用startDiscovery()方法后,系統(tǒng)開始搜索藍牙設(shè)備,此時系統(tǒng)會發(fā)送以下3個廣播命令:
ACTION_DISCOVERY_START表示開始搜索;ACTION_DISCOVERY_FINISHED表示搜索結(jié)束;ACTION_FOUND表示找到設(shè)備。應(yīng)用程序?qū)⑺阉鞯降乃{牙設(shè)備以列表的形式展示給用戶,供用戶選擇。
2.3.3 藍牙設(shè)備連接的建立
藍牙設(shè)備連接的建立,是以服務(wù)器端與客戶端的機制來實現(xiàn)的。兩個藍牙設(shè)備在同一個RFCOMMchannel下分別獲得一個連接的BluetoothSocket,便可建立藍牙設(shè)備的通信連接??蛻舳讼?qū)嵗膁evice發(fā)出建立連接的請求,即通過createRfcommSocketTo ServiceRecord()方法來請求建立一個連接,當連接創(chuàng)建成功后,返回一個BluetoothSocket類型數(shù)據(jù):
BluetoothSocket mSocket = device. createRfcommSocketTo ServiceRecord(MY_UUID_SECURE);
服務(wù)器端通過UUID創(chuàng)建BluetoothServerSocket來接收來自其他設(shè)備的連接請求:
BluetoothServerSocket mServerSocket=mAdapter.listen UsingWithServiceRecord(NAME_SECURE, UUIDE);
當接收到藍牙設(shè)備的連接請求時,調(diào)用mServerSocket的accept()方法,實現(xiàn)服務(wù)器端BluetoothSocket的初始化。
2.3.4 藍牙設(shè)備通信的實現(xiàn)
已經(jīng)建立了藍牙連接的Android設(shè)備通過調(diào)用BluetoothSocket的getInputStream()方法來獲得輸入流,調(diào)用getOutputStream()方法獲得輸出流。輸入流用于接收已連接的藍牙設(shè)備發(fā)送過來的數(shù)據(jù),從輸入流中讀取數(shù)據(jù),即可實現(xiàn)數(shù)據(jù)的接收。輸出流用來發(fā)送數(shù)據(jù)到已連接的藍牙設(shè)備上,向輸出流寫數(shù)據(jù),即可實現(xiàn)數(shù)據(jù)的發(fā)送。數(shù)據(jù)的發(fā)送和接收過程如圖1所示。
3 遠程控制模塊的研究與實現(xiàn)
3.1 遠程控制功能研究
Android系統(tǒng)中,藍牙協(xié)議棧在AndroidSDK中實現(xiàn),藍牙數(shù)據(jù)底層解析的過程是應(yīng)用程序不可見的。對于兩個通過藍牙協(xié)議連接的智能設(shè)備,運行在手表端和手機端的應(yīng)用程序,僅能夠?qū)斎肓骱洼敵隽鬟M行操作,向輸出流寫數(shù)據(jù)便能夠?qū)崿F(xiàn)數(shù)據(jù)的發(fā)送,從輸入流中讀數(shù)據(jù)便能夠?qū)崿F(xiàn)數(shù)據(jù)的接收。
3.2 數(shù)據(jù)結(jié)構(gòu)定義
通過分析設(shè)定包頭的大小為1 B,包頭的數(shù)值范圍為0~255,最多能夠表示256種不同的數(shù)據(jù)類型,此應(yīng)用程序的數(shù)據(jù)類型有兩種,即數(shù)據(jù)信息和控制信息,因此可以選取0和1分別表示。其余的數(shù)值表示,可用于程序的擴展,當所要區(qū)分的數(shù)據(jù)類型增多后,可使用保留的數(shù)值來表示。對于本應(yīng)用程序用數(shù)值0來表示普通數(shù)據(jù)信息,數(shù)值1表示控制信息。
確定了數(shù)據(jù)包頭的數(shù)據(jù)大小,以及各數(shù)據(jù)類型的表示后,定義一個發(fā)送數(shù)據(jù)的結(jié)構(gòu),管理發(fā)送和接收的數(shù)據(jù),定義的數(shù)據(jù)結(jié)構(gòu)如下:
class SendData
{ //定義字節(jié)類型的control包頭 public byte control;
//數(shù)據(jù)部分為字節(jié)數(shù)組 public byte[]; data; }
3.3 遠程控制功能實現(xiàn)
設(shè)計的應(yīng)用程序?qū)⒒贏ndroid的遠程控制功能應(yīng)用于手機與智能手表之間,實現(xiàn)手表控制手機拍攝照片。在Android應(yīng)用程序中實現(xiàn)遠程控制的功能,首先要對包頭信息進行定義。根據(jù)遠程控制功能的分析以及數(shù)據(jù)結(jié)構(gòu)的定義可知此應(yīng)用程序中發(fā)送信息分為兩類,一類發(fā)送的是圖像的數(shù)據(jù)信息,在Android程序中定義靜態(tài)變量:
Private static final byte DATA=(byte)0;
發(fā)送圖像信息時,用來對發(fā)送數(shù)據(jù)結(jié)構(gòu)的包頭進行賦值,標明發(fā)送的數(shù)據(jù)圖像信息。另一類是拍攝照片的控制信息,在Android程序中定義靜態(tài)變量:
Private static final byte TAKE_PHOTO=(byte)1;
發(fā)送拍攝照片的控制信息時,對發(fā)送數(shù)據(jù)結(jié)構(gòu)的包頭進行賦值,標明發(fā)送的數(shù)據(jù)為拍攝照片控制指令。
應(yīng)用程序中,已經(jīng)建立藍牙連接的兩個藍牙設(shè)備,一個充當主控端,另一個充當被控端。被控端發(fā)送的數(shù)據(jù)為攝像頭采集到的圖像信息。
4 數(shù)據(jù)加密解密模塊研究與實現(xiàn)
4.1 加密解密算法的選擇
本功能模塊采用了混合加密的加密算法,通過RC4對原始數(shù)據(jù)進行第一次加密,由于RC4加密算法相對簡單,安全性上存在著一定的風(fēng)險,而且在傳輸過程中要傳輸加密數(shù)據(jù)的秘鑰,這將極大地威脅到通信的安全。為了把這種風(fēng)險降低,采用RSA加密算法進行第二次加密,第二次加密的數(shù)據(jù)僅僅是第一次加密算法RC4的秘鑰信息。整個的加密過程如圖2所示。
4.2 RC4算法實現(xiàn)
Android應(yīng)用程序編寫使用的是Java語言的軟件開發(fā)工具包,即JDK。JDK中提供了對于加密算法的支持,因此在本應(yīng)用中可以直接調(diào)用JDK提供的RC4加密算法的接口,實現(xiàn)對數(shù)據(jù)的加密解密過程。首先生成秘鑰程序為:
public static Key getKey()
{ Key key = null;
KeyGenerator kg = KeyGenerator.getInstance("RC4");
kg.init(128); //產(chǎn)生秘鑰
key = kg.generateKey(); return key; }
首先通過KeyGenerator定義秘鑰產(chǎn)生變量kg,通過getInstance方法構(gòu)造出RC4加密算法的秘鑰產(chǎn)生器。然后初始化秘鑰的大小,init(intkeysize)方法中參數(shù)的數(shù)值指定了秘鑰的長度。
圖2 加密過程
4.3 混合加密算法實現(xiàn)
在程序中,通過返回字節(jié)數(shù)組的length數(shù)值得到數(shù)據(jù)信息的長度,長度信息為int類型的數(shù)值。int類型數(shù)據(jù)占用4 B空間,int轉(zhuǎn)換byte類型的函數(shù)為:
public static byte[] intToBytes(int n)
{ byte[] b = new byte[4];
for(int i = 0;i < 4;i++)
{ b[i] = (byte)(n >> (24- i * 8)); } return b; }
程序中RC4與RSA混合加密過程的主要程序:
public synchronized void write(byte[] buffer)
{??
byte[] encr= RC4.encrypt(buffer,key_send);
byte[] encodedData=RSAUtils.encryptByPublic Key(key_ send, publicKey);
int sum = intToBytes(encr.length);
byte[] send=new byte[4+encodedData.length+encr.length];
System.arraycopy(sum, 0, send, 0, 4);
System.arraycopy(encodedData, 0, send, 4, 128);
System.arraycopy(encr, 0, send, 132, encr.length);
?? }
首先使用RC4加密算法來加密數(shù)據(jù)buffer,秘鑰為key_send。然后使用RSA加密算法加密RC4的秘鑰信息key_send。接著,計算出buffer經(jīng)過RC4加密后的數(shù)據(jù)長度。將上述的三部分信息按著定義的結(jié)構(gòu)依次寫入欲發(fā)送的字節(jié)數(shù)組send中。最后,將字節(jié)數(shù)組send寫入到通過BluetoothSocket獲得的輸出流中,即可實現(xiàn)藍牙數(shù)據(jù)的發(fā)送。
5 藍牙遠程控制拍照實現(xiàn)
藍牙遠程控制的相機拍照程序是基于Android系統(tǒng)的藍牙遠程控制研究的一個實際應(yīng)用程序。通過藍牙通信模塊的實現(xiàn)、遠程控制功能模塊的實現(xiàn)、混合加密算法的實現(xiàn),將三部分結(jié)合起來,應(yīng)用于遠程控制照片的拍攝上,實現(xiàn)了通過GEAR手表來控制手機進行照片的拍攝。
6 結(jié) 論
通過分析國內(nèi)外基于藍牙的遠程通信研究現(xiàn)狀以及發(fā)展趨勢。對比多種對稱加密算法和非對稱加密算法的優(yōu)勢和劣勢,最后選擇通過混合加密算法對發(fā)送的數(shù)據(jù)進行加密和解密。本文完成了藍牙遠程控制功能的研究,采用混合加密的方式對數(shù)據(jù)進行加密解密。將藍牙遠程控制功能的研究應(yīng)用在拍照程序上,實現(xiàn)了通過智能手表遠程控制手機拍攝照片的功能。
參考文獻
[1] 趙姍姍,楊臻,徐奉,等.基于Android平臺的高可靠遠程控制系統(tǒng)[J].網(wǎng)絡(luò)新媒體技術(shù),2013(7):12?14.
[2] 李忠慧,李秀梅.Android系統(tǒng)的安全分析及策略[J].福建電腦,2013(1):112?113.
[3] 蓋索林,王世江.Google Android開發(fā)入門指南[M].北京:人民郵電出版社,2009:43?55.
[4] 陸繼翔,李映.Android應(yīng)用程序的性能優(yōu)化分析與研究[J].機械設(shè)計與制造工程,2013(3):82?85.
[5] 蔡羅成.Android后臺監(jiān)聽實現(xiàn)機制淺析[J].信息安全與通信保密,2010(6):39?41.
[6] 浩明.基于安卓系統(tǒng)的手機防盜設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2014,37(14):36?39.