<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 具有數據加密的Android藍牙遠程控制

具有數據加密的Android藍牙遠程控制

作者: 時(shí)間:2016-10-29 來(lái)源:網(wǎng)絡(luò ) 收藏

隨著(zhù)科技的不斷的發(fā)展,以及人們對于高科技產(chǎn)品的依賴(lài),智能可穿戴設備逐步的發(fā)展起來(lái),走進(jìn)了人們的日常生活。智能手表、智能眼鏡的問(wèn)世為智能可穿戴設備的發(fā)展帶來(lái)了新的方向,Android系統廣泛的應用于智能可穿戴設備、智能手機中。為了使智能可穿戴設備更好的與手機相互配合,滿(mǎn)足于人們的需求,本文研究了藍牙功能,實(shí)現了具有功能的應用程序。由于通過(guò)藍牙傳送的數據能夠被追蹤竊取到,發(fā)送數據的安全性也尤為重要,通過(guò)比較本文采用RC4和RSA混合加密方式對發(fā)送的數據進(jìn)行加密。為了適應不同品牌的智能手表,首先實(shí)現了在手機之間的功能。程序應用在手表上時(shí),只需對顯示界面的長(cháng)寬比例根據手表的分辨率進(jìn)行修改,即可滿(mǎn)足功能性的需求。

本文引用地址:http://dyxdggzs.com/article/201610/309256.htm

1 藍牙模塊設計

1.1 Android設備間建立藍牙連接

實(shí)現通過(guò)藍牙的遠程控制,最基本的操作是要先建立設備之間的藍牙連接,Android SDK提供了功能完善的API,通過(guò)調用系統的API能夠實(shí)現對附近藍牙設備搜索、返回遠程設備的硬件地址、建立連接、斷開(kāi)連接等工作。藍牙連接的建立主要分為以下兩個(gè)步驟:

(1)搜索附近藍牙設備

BluetoothAdapter 類(lèi)中提供了本地藍牙適配器的接口,所有的藍牙交互都是從此API開(kāi)始的,主要功能有開(kāi)關(guān)藍牙設備、掃描藍牙設備、設置或獲取藍牙狀態(tài)值、獲取藍牙名稱(chēng)、獲取藍牙Mac地址等。調用enable() 方法打開(kāi)本地的藍牙,然后調用startDiscovery()搜索附近設備,將所有搜索到的藍牙地址存儲在列表中。通過(guò)獲得的遠程藍牙設備的地址,實(shí)例化一個(gè)藍牙設備的語(yǔ)句如下:

BluetoothDevice device =BluetoothAdapter .getRemoteDevice(address)

(2)建立藍牙連接

建立藍牙連接的過(guò)程中的兩個(gè)設備,分別充當了Server和Client。對于Server端通過(guò)UUID來(lái)創(chuàng )建一個(gè)BluetoothServerSocket來(lái)收聽(tīng)來(lái)自其他設備的連接請求,當有遠端設備發(fā)來(lái)建立連接的請求,對請求進(jìn)行響應實(shí)現藍牙的連接。在程序中使用如下語(yǔ)句:

BluetoothServerSocket mmServerSocket = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE, Y_UUID_SECURE);

對于Client端, 使用第1步中實(shí)例化的藍牙設備BluetoothDevice,通過(guò) UUID創(chuàng )建一個(gè)BluetoothSocket, 發(fā)送連接請求,與Server端建立連接, 來(lái)實(shí)現數據的接收和發(fā)送,在程序中使用如下語(yǔ)句:

BluetoothSocket mmSocket = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);

Server端BluetoothServerSocket代表一個(gè)打開(kāi)服務(wù)器套接字偵聽(tīng)傳入的請求,類(lèi)似于一個(gè)TCP SeverSocket,當連接建立成功后,調用BluetoothServerSocket接口的 accept()方法,返回一個(gè)BluetoothSocket對象。BluetoothSocket用來(lái)代表一個(gè)藍牙套接字,這個(gè)套接字類(lèi)似于 TCP套接字。這是應用程序的連接點(diǎn),通過(guò)此接口可以實(shí)現藍牙數據的接收和發(fā)送。調用BluetoothSocket接口中的方法,得到輸入輸出流,在應用程序中向輸出流中寫(xiě)數據實(shí)現藍牙數據的發(fā)送,從輸入流讀數據,實(shí)現藍牙數據的接收。

1.2 自定義藍牙遠程控制協(xié)議

Android系統上藍牙的連接過(guò)程通過(guò)以上的兩步即可建立完成,在應用中對于藍牙使用僅僅限于數據的傳送,對于數據的內容并不關(guān)心。然而這并不能滿(mǎn)足用戶(hù)的需求,用戶(hù)更期望通過(guò)藍牙實(shí)現遠程控制的功能。當前藍牙發(fā)送的數據并沒(méi)有對內容進(jìn)行考慮,僅僅是簡(jiǎn)單的數據傳送,如果想實(shí)現藍牙的遠程控制,那么就需要自定義發(fā)送的數據結構??刂菩畔⒑推胀〝祿畔⒕ㄟ^(guò)藍牙在設備之間進(jìn)行傳送,若想對控制信息和數據信息進(jìn)行區分,就要在已有的發(fā)送數據的首部,添加頭結點(diǎn),設置頭結點(diǎn)占用1字節的存儲空間,作為控制位標識,用來(lái)標識傳遞信息的類(lèi)型。1 字節的頭結點(diǎn)最多可以標識出256種不同的信息類(lèi)型,在現階段的使用過(guò)程中能夠滿(mǎn)足需求,當然如果控制類(lèi)型增加,只需增加控制位的位數。定義的數據結構如下所示:

自定義藍牙遠程控制協(xié)議

本應用程序實(shí)現了手機通過(guò)藍牙遠程控制另一部手機進(jìn)行圖片預覽以及拍照功能。因此發(fā)送信息分為兩類(lèi),一類(lèi)發(fā)送的是圖像的數據信息,在A(yíng)ndroid程序中定義控制位為:

private static final byte DATA =(byte) 0;

另一類(lèi)是拍照指令,在A(yíng)ndroid程序中定義控制位為:

private static final byte TAKE_PHOTO = (byte)1;

如果欲實(shí)現更多的控制功能,可以自定義更多的控制位類(lèi)別,在程序進(jìn)行相應的響應,即可實(shí)現更多的控制功能。

當Sever端收到數據以后,對于數據的頭結點(diǎn)進(jìn)行判斷。通過(guò)判斷控制位的類(lèi)型來(lái)區分出是數據信息還是控制信息,返回給主函數對其響應。如果接收到的數據包為數據信息,則調用圖像顯示功能,將接收的圖片顯示出來(lái)。如果收到的數據的是拍照指令,即可調用拍照功能模塊,將拍攝的照片進(jìn)行存儲。

2 加密模塊設計

雖然自定義的藍牙數據結構滿(mǎn)足了人們通過(guò)藍牙遠程控制的需求,然而卻也存在著(zhù)一定的安全性問(wèn)題。在實(shí)際生活中,環(huán)境比較復雜,無(wú)線(xiàn)傳輸的信號能夠被他人通過(guò)一些工具監測并且竊取到。如果當用戶(hù)傳送的圖片信息被他人截取,用戶(hù)的隱私就會(huì )被輕松的獲取到。然而這并不算最危險的,如果在程序中添加了很多控制信息,控制信息被他人截取并且掌握后,那么可能就會(huì )導致手機被他人控制,這將給用戶(hù)帶來(lái)更大的損失。

為了保證信息的安全性,需要對藍牙發(fā)送的數據進(jìn)行加密操作。數據的加密一般要經(jīng)過(guò)復雜加密算法來(lái)實(shí)現,然而對于手機而言,運算效率不是很高,而且若要實(shí)時(shí)的預覽遠程設備采集到的數據,也就意味著(zhù)要在極短的時(shí)間內,加密和解密大量的數據,那么加密算法的加密效率更加關(guān)鍵。

文獻4通過(guò)使用一種基于A(yíng)ES和RSA的混合加密算法來(lái)保證藍牙通信過(guò)程中的數據安全。AES算法以其在塊加密高效的特點(diǎn)應用與藍牙通信的數據信息加密上,RSA算法在秘鑰管理上比較有優(yōu)勢,能夠有很高的安全性,因此用來(lái)加密AES的秘鑰信息。

文獻5比較了RC4 和AES對于設備CPU時(shí)間占用、內存消耗以及電池電量的消耗進(jìn)行了分析對比,得出了RC4更適合于大數據包的加密,而AES更適合于小數據包的加密。

經(jīng)過(guò)多方面的綜合比較,本文采用RC4和RSA混合加密的方式對數據進(jìn)行加密。利用RC4在大數據包加密速度快的優(yōu)勢,首先對數據使用RC4進(jìn)行加密。由于RC4加密算法相對簡(jiǎn)單,其安全性上也存在著(zhù)一定的風(fēng)險,為了把這種風(fēng)險降低,采用混合加密的處理方式對數據進(jìn)行操作。RC4加密算法加密完數據信息后,進(jìn)行第二次加密,加密RC4的秘鑰信息。由于RC4秘鑰的長(cháng)度比較短,可以采用運算過(guò)程相對復雜但是安全性非常高的RSA加密算法。整個(gè)的加密過(guò)程如圖1所示。

圖 1數據加密過(guò)程

圖 1過(guò)程

加密的過(guò)程主要分為兩步:

第一步,對于原始數據 Original Message用RC4秘鑰來(lái)進(jìn)行加密。

第二步,對于RC4秘鑰使用RSA進(jìn)行加密,保證了此秘鑰在數據傳輸安全性。防止了信息被截取后,容易分析出RC4秘鑰內容的風(fēng)險。

解密過(guò)程如圖2所示。

圖2數據解密過(guò)程

圖2數據解密過(guò)程

解密過(guò)程同樣分為兩個(gè)步驟,當應用程序收到發(fā)送來(lái)的數據后,第一步讀取RC4秘鑰部分,通過(guò)RSA的私有秘鑰進(jìn)行解密,還原RC4秘鑰。第二步,使用RC4秘鑰對數據部分進(jìn)行解密,還原出圖像信息。

掌握了RC4加密算法和RSA加密算法后,即可實(shí)現混合加密算法。對發(fā)送的數據進(jìn)行混合加密,保證用戶(hù)數據的安全性。

最終寫(xiě)入藍牙輸出流中的數據主要包含3部分,如下所示:

最終寫(xiě)入藍牙輸出流中的數據

第一部分,數據的長(cháng)度,在A(yíng)ndroid程序中,為了將連續發(fā)送的圖片的信息,每一幀識別出來(lái),還需要在頭部添加一個(gè)數據信息長(cháng)度。以便在數據被接收到后,能夠確定所要讀取的字節數。

第二部分是RC4秘鑰,這部分中RC4的秘鑰是被RSA所加密后的結果,能夠保證RC4的秘鑰再被竊取到后也不能夠直接使用,在當今計算機的運算效率下,還不能夠實(shí)現對RSA加密算法的破解。

第三部分是經(jīng)RC4加密的數據信息。來(lái)自上層的應用程序欲發(fā)送的未加密的數據到了此模塊,要進(jìn)行RC4加密。信息中保存著(zhù)所有的用戶(hù)操作的信息。這部分的數據長(cháng)度是根據情況來(lái)分配。如果是控制信息,那么信息長(cháng)度會(huì )非常短。如果是圖片數據,那么信息長(cháng)度會(huì )比較長(cháng)。這個(gè)長(cháng)度信息由第一部分的數據長(cháng)度進(jìn)行記錄。

3.藍牙遠程控制拍照程序設計

本程序是在基于A(yíng)ndroid操作系統的智能手機上構建的一個(gè)遠程控制程序。程序中包括著(zhù)藍牙連接的建立、藍牙數據的編碼與傳送、3部分。實(shí)現了通過(guò)手機實(shí)時(shí)顯示另一部手機端攝像頭采集到的數據,通過(guò)點(diǎn)擊程序中的拍照鍵即可控制手機進(jìn)行照片的拍攝。程序的流程圖如圖3所示。

圖3藍牙遠程控制程序流程圖

圖3藍牙遠程控制程序流程圖

3.1 建立藍牙連接

創(chuàng )建DeviceListActivity類(lèi)用于藍牙設備的搜索,返回選擇的藍牙設備的名稱(chēng)和地址。

其功能流程如圖4所示。

圖4藍牙連接建立流程圖

圖4藍牙連接建立流程圖

通過(guò)搜索設備功能可獲得周?chē)梢?jiàn)的藍牙設備信息,以列表的形式顯示所有搜索到的設備。用戶(hù)根據需要,選擇所要連接的設備,DeviceListActivity類(lèi)返回設備的名稱(chēng)以及MAC地址。

3.2 藍牙數據的編碼

根據 DeviceListActivity返回的遠端藍牙設備的名稱(chēng)和地址,調用Bluetooth API建立藍牙設備的連接,當連接建立完成后,便進(jìn)入到了主功能模塊。

首先在onCreat()函數中,完成了參數的初始化工作,初始化發(fā)送標志位SendFlag = 0,在此狀態(tài)下,應用程序處于接收數據的狀態(tài)。攝像頭停止采集圖像信息,不進(jìn)行發(fā)送數據。接著(zhù)再初始化Button監聽(tīng)事件,應用程序中定義了兩個(gè)Button,一個(gè)Button用來(lái)控制此Activity處于發(fā)送還是接收的狀態(tài);另一個(gè)Button用來(lái)控制是否對拍照功能予以響應;

Activity處于發(fā)送狀態(tài)時(shí),將Camera采集到的每一幀數據進(jìn)行處理,由于圖片比較大,藍牙發(fā)送的數據速率是有限的,為了保證接收端接收到的視頻圖像的連貫性,要對采集到的圖片進(jìn)行壓縮處理。調用Android API中 Matrix的postScale()方法,設置縮放比例,實(shí)現圖片的縮放。

接下來(lái)數據部分要添加信息頭,如果是拍照的控制信息,添加第1節中設定的TAKE_PHOTO 其值為數值 1;如果是照片信息,添加 DATA其值為數值 0。通過(guò)添加信息頭,便實(shí)現了對于數據信息和控制信息的區分。最后進(jìn)入到下一步驟,對數據進(jìn)行加密。

3.3

數據加密采用RC4與RSA混合加密方式,再上一節中詳細的予以闡述。數據加密的流程如圖5所示。

圖5 數據加密流程圖

圖5 數據加密流程圖

在接收端,線(xiàn)程一直等待藍牙發(fā)送的數據,當讀取到數據,便根據解密的方法,依次去除加密信息。解密的順序與加密構成逆過(guò)程。解密流程如圖6所示。

圖6 數據解密流程圖

圖6 數據解密流程圖

對于解密出來(lái)的數據,要對其分析判斷數據的類(lèi)型,根據自定義的藍牙數據結構可知,數據的第一位即為數據類(lèi)型位。進(jìn)行數據類(lèi)型判斷的主要程序如下所示:

switch(decr[0]) {

case TAKE_PHOTO:

mHandler.obtainMessage(MainActivity.MESSAGE_READ, -1,TAKE_PHOTO , buffer).sendToTarget();

break;

case DATA:

mHandler.obtainMessage(MainActivity.MESSAGE_READ, decr.length,DATA, decr).sendToTarget();

break;

}

通過(guò)以上3個(gè)步驟,便實(shí)現了遠程控制的功能。在實(shí)際應用中,其中一部手機作為被控制端,實(shí)時(shí)的將照相機采集到的數據發(fā)送到另一部手機??刂贫藢?shí)時(shí)顯示接收到的圖像,當需要拍攝照片時(shí)候,點(diǎn)擊拍照按鈕,即可實(shí)現遠程控制的功能,完成照片的拍攝,并將照片存儲起來(lái)。

結語(yǔ)

本文實(shí)現了基于A(yíng)ndroid系統的藍牙遠程控制功能。極大的豐富用戶(hù)對于智能設備功能的需求。在數據傳送的過(guò)程中,使用了混合加密算法對數據加密,保證了用戶(hù)數據的安全以及保證了設備不被他人控制。在方便人們生活的同時(shí)也保護了用戶(hù)的隱私。隨著(zhù)智能可穿戴設備的發(fā)展,智能設備通過(guò)藍牙相互連接和相互控制的應用也會(huì )比較廣泛,智能可穿戴設備的主要以搭載Android系統為主。本文中實(shí)現的遠程控制拍攝照片的功能,移植到手表端,核心的程序部分均不需要改動(dòng),在程序顯示界面部分根據不同種類(lèi)設備的分辨率進(jìn)行相應的調整,便能實(shí)現通過(guò)藍牙進(jìn)行遠程控制的功能。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>