本發(fā)明涉及智能固廢垃圾回收領(lǐng)域,特別是涉及一種智能固廢垃圾回收數(shù)據(jù)平臺(tái)與設(shè)備的通訊加密方法。
背景技術(shù):
以固廢垃圾為飲料包裝為例,現(xiàn)有的智能飲料包裝回收設(shè)備主要是作為終端飲料包裝回收設(shè)備,用戶可以操作該設(shè)備,進(jìn)行投瓶操作完成回收飲料包裝的業(yè)務(wù)。智能飲料包裝回收數(shù)據(jù)平臺(tái)主要負(fù)責(zé)監(jiān)控和管理終端回收設(shè)備,包括用戶管理,設(shè)備回收數(shù)據(jù)管理,設(shè)備預(yù)警管理,設(shè)備回收預(yù)警管理等相關(guān)業(yè)務(wù)管理。
終端設(shè)備由設(shè)備PC、PLC集成電路板和機(jī)械設(shè)備組成,之間通信主要依托modbus通信協(xié)議,由PC端通過PLC向機(jī)械設(shè)備發(fā)布操作指令,控制機(jī)械設(shè)備完成操作。而目前終端設(shè)備的設(shè)備PC與數(shù)據(jù)平臺(tái)之間的通訊過程加密解密方法簡單,容易被破解,具有安全性差的缺陷。如何能創(chuàng)設(shè)一種通訊安全性高且具有唯一性的新的智能固廢垃圾回收數(shù)據(jù)平臺(tái)與設(shè)備的通訊加密方法,成為當(dāng)前急需改進(jìn)的目標(biāo)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是提供一種安全性高且具有唯一性的智能固廢垃圾回收數(shù)據(jù)平臺(tái)與設(shè)備的通訊加密方法。
為解決上述技術(shù)問題,本發(fā)明采用如下技術(shù)方案:
智能固廢垃圾回收數(shù)據(jù)平臺(tái)與設(shè)備通訊加密方法,所述設(shè)備為多個(gè),各設(shè)備與數(shù)據(jù)平臺(tái)采用http協(xié)議進(jìn)行通訊,包括:
(1)設(shè)備PC向數(shù)據(jù)平臺(tái)發(fā)送信息:設(shè)備PC向數(shù)據(jù)平臺(tái)發(fā)送數(shù)據(jù)信息,數(shù)據(jù)信息經(jīng)過隨機(jī)加密Key和默認(rèn)解密Key進(jìn)行兩次加密;
(2)數(shù)據(jù)平臺(tái)接收信息:數(shù)據(jù)平臺(tái)通過默認(rèn)解密Key與隨機(jī)加密Key進(jìn)行兩次解密,處理并存儲(chǔ)所解密的數(shù)據(jù)信息,獲得處理結(jié)果信息;
(3)數(shù)據(jù)平臺(tái)回復(fù)信息:數(shù)據(jù)平臺(tái)的處理結(jié)果信息經(jīng)過隨機(jī)加密Key和默認(rèn)解密Key進(jìn)行兩次加密,回復(fù)給設(shè)備PC;
(4)設(shè)備PC接收信息:設(shè)備PC接收信息后通過默認(rèn)解密Key與隨機(jī)加密Key進(jìn)行兩次解密,獲得解密數(shù)據(jù)信息;
所述(1)、(2)(3)(4)中的默認(rèn)解密Key為雙方共同約定的,隨機(jī)加密Key是從雙方共同約定的多個(gè)加密Key中隨機(jī)抽取的。
進(jìn)一步地,具體包括如下步驟:
(1)設(shè)備PC向數(shù)據(jù)平臺(tái)發(fā)送信息;
(11)發(fā)送信息參數(shù)轉(zhuǎn)換為JSON數(shù)據(jù),所述參數(shù)包括:當(dāng)前通信狀態(tài)值、設(shè)備唯一標(biāo)識(shí)、當(dāng)前系統(tǒng)時(shí)間、通訊流水號(hào);
(12)從共同約定的多個(gè)32位的加密Key中隨機(jī)取出其中一個(gè)加密Key,記住其序號(hào);
(13)用步驟(12)中獲得的隨機(jī)加密Key加密步驟(11)中的JSON數(shù)據(jù)獲得二進(jìn)制byte數(shù)組;
(14)合并byte為新數(shù)組=步驟(13)中的二進(jìn)制byte數(shù)組+步驟(12)中的隨機(jī)加密Key的序號(hào);
(15)將步驟(14)中的新數(shù)組轉(zhuǎn)換為16進(jìn)制編碼的傳輸信息;
(16)獲取新的當(dāng)前系統(tǒng)時(shí)間與步驟(15)中的傳輸信息組成JSON數(shù)據(jù);
(17)獲得最終加密二進(jìn)制數(shù)組=用共同約定的32位的默認(rèn)解密Key加密步驟(16)的JSON數(shù)據(jù);
(18)將步驟(17)的二進(jìn)制數(shù)組轉(zhuǎn)換為16進(jìn)制;
(19)將16進(jìn)制數(shù)據(jù)發(fā)送到數(shù)據(jù)平臺(tái),參數(shù)名為d;
(2)數(shù)據(jù)平臺(tái)接收設(shè)備PC信息;
(21)根據(jù)步驟(19)的參數(shù)名d獲取16進(jìn)制數(shù)據(jù);
(22)根據(jù)共同約定的32位的默認(rèn)解密Key解密步驟(21)中的數(shù)據(jù)獲得JSON數(shù)據(jù);
(23)獲取時(shí)間進(jìn)行時(shí)間差校驗(yàn),當(dāng)時(shí)間差超過某一設(shè)定值,自動(dòng)算失??;
(24)將傳輸信息轉(zhuǎn)換為二進(jìn)制,取出32位的隨機(jī)加密Key序號(hào),獲取隨機(jī)加密Key;
(25)用步驟(24)中的隨機(jī)加密Key解密,去掉最后一位的二進(jìn)制獲得JSON數(shù)據(jù);
(26)根據(jù)JSON數(shù)據(jù)進(jìn)行認(rèn)證,認(rèn)證通過后如果設(shè)備唯一識(shí)別碼與數(shù)據(jù)平臺(tái)對(duì)應(yīng),則會(huì)給出一個(gè)登錄Key;
(3)數(shù)據(jù)平臺(tái)回復(fù)信息;
(31)將回復(fù)信息參數(shù)轉(zhuǎn)換為JSON數(shù)據(jù),所述參數(shù)包括:當(dāng)前通信狀態(tài)值、結(jié)果狀態(tài)、通信流水號(hào)及登錄Key;所述結(jié)果狀態(tài)包括成功、失敗及其它;
(32)從共同約定的多個(gè)32位的加密Key中隨機(jī)取出其中一個(gè)加密Key,記住其序號(hào);
(33)用步驟(32)中獲得的隨機(jī)加密Key加密步驟(11)中的JSON數(shù)據(jù)獲得二進(jìn)制byte數(shù)組;
(34)合并byte為新數(shù)組=步驟(33)中的二進(jìn)制byte數(shù)組+步驟(32)中的隨機(jī)加密Key的序號(hào);
(35)將步驟(34)中的新數(shù)組轉(zhuǎn)換為16進(jìn)制編碼的傳輸信息;
(36)獲取新的系統(tǒng)時(shí)間與步驟(35)中的傳輸信息組成JSON數(shù)據(jù);
(37)獲得最終加密二進(jìn)制數(shù)組=用共同約定的32位的默認(rèn)解密Key加密步驟(36)的JSON數(shù)據(jù);
(38)將步驟(37)的二進(jìn)制數(shù)組轉(zhuǎn)換為16進(jìn)制;
(39)將16進(jìn)制數(shù)據(jù)作為內(nèi)容回復(fù)給設(shè)備PC;
(4)設(shè)備PC接收信息;
(41)獲取步驟(39)的16進(jìn)制數(shù)據(jù);
(42)根據(jù)共同約定的32位的默認(rèn)解密Key解密步驟(41)中的數(shù)據(jù)獲得JSON數(shù)據(jù);
(43)將傳輸信息轉(zhuǎn)換為二進(jìn)制,取出32位的隨機(jī)加密Key序號(hào),獲取隨機(jī)加密Key;
(44)用步驟(43)中的隨機(jī)加密Key解密,去掉最后一位的二進(jìn)制獲得JSON數(shù)據(jù);
根據(jù)所述步驟(44)的JSON數(shù)據(jù)結(jié)果,如果成功,那么設(shè)備PC記錄登錄Key,在后續(xù)每次設(shè)備PC向數(shù)據(jù)平臺(tái)發(fā)送信息的同時(shí),發(fā)送信息的參數(shù)都加入該登錄Key;數(shù)據(jù)平臺(tái)接收信息后在步驟(26)不進(jìn)行再次認(rèn)證,對(duì)該登錄Key是否匹配進(jìn)行核對(duì)即可。
進(jìn)一步地,當(dāng)設(shè)備PC與數(shù)據(jù)平臺(tái)沒有通訊連接超過某一設(shè)定時(shí)間,則認(rèn)為與數(shù)據(jù)平臺(tái)斷開連接,對(duì)應(yīng)地,步驟(26)中,數(shù)據(jù)平臺(tái)接收信息后進(jìn)行認(rèn)證,然后重新分配新的登錄Key。
進(jìn)一步地,所述步驟(12)、(32)中的共同約定的32位的加密Key分別為128個(gè),對(duì)應(yīng)地,從中隨機(jī)取出的加密Key,其序號(hào)為偏移量最小0最大127。
進(jìn)一步地,所述步驟(23)中,當(dāng)時(shí)間差超過10000毫秒,自動(dòng)算失敗。
進(jìn)一步地,所述步驟(31)中的結(jié)果狀態(tài)中的其它包括:超時(shí)、未登錄及異常。
進(jìn)一步地,當(dāng)設(shè)備PC與數(shù)據(jù)平臺(tái)沒有通訊連接超過90秒,則認(rèn)為與數(shù)據(jù)平臺(tái)斷開連接。
采用這樣的設(shè)計(jì)后,本發(fā)明至少具有以下優(yōu)點(diǎn):
1、本發(fā)明通過采用共同約定的加密Key中的隨機(jī)加密Key及共同約定的默認(rèn)解密Key對(duì)信息在單次傳輸過程中進(jìn)行兩次加密、在單次接收過程中進(jìn)行兩次解密,極大地提高了通訊的安全性。
2、本發(fā)明通過采用登錄key的連續(xù)驗(yàn)證方式,使數(shù)據(jù)平臺(tái)無需每次通訊連接都進(jìn)行復(fù)雜的認(rèn)證過程,只是在時(shí)間斷開的狀態(tài)下,才進(jìn)行復(fù)雜認(rèn)證,在保證通訊安全的基礎(chǔ)上,減少了數(shù)據(jù)平臺(tái)內(nèi)部運(yùn)行資源的浪費(fèi),大大提高了數(shù)據(jù)平臺(tái)的應(yīng)用效率。
附圖說明
上述僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,以下結(jié)合附圖與具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。
圖1是智能固廢垃圾回收數(shù)據(jù)平臺(tái)與設(shè)備之間的數(shù)據(jù)流向圖。
具體實(shí)施方式
本發(fā)明的智能固廢垃圾回收數(shù)據(jù)平臺(tái)與設(shè)備的通訊加密方法,其中的數(shù)據(jù)流向如圖1所示,通訊過程由設(shè)備PC首先發(fā)起通信要求,發(fā)送的信息由數(shù)據(jù)平臺(tái)接收,數(shù)據(jù)平臺(tái)接收數(shù)據(jù)后又向設(shè)備PC發(fā)送回復(fù)信息,最終由設(shè)備PC接收,完成一次通信操作。其通訊安全原則主要是:設(shè)備PC與數(shù)據(jù)平臺(tái)采用http協(xié)議進(jìn)行通訊,每個(gè)設(shè)備PC分配有獨(dú)立登錄Key,數(shù)據(jù)平臺(tái)會(huì)驗(yàn)證登錄Key與設(shè)備唯一標(biāo)識(shí)后決定信息是否合法,通訊數(shù)據(jù)要經(jīng)過共同約定的加密Key中的隨機(jī)加密Key及共同約定的默認(rèn)解密Key進(jìn)行兩次加密及解密,最大程度地保護(hù)系統(tǒng)通訊安全性。
本具體實(shí)施方式中涉及的名稱解釋如下:
設(shè)備PC向數(shù)據(jù)平臺(tái)發(fā)送信息:字符集UTF8,協(xié)議HTTP,URL:IP/pcs,端口:以服務(wù)器為準(zhǔn),提交模式:post,參數(shù)名:d,參數(shù)數(shù)據(jù):16進(jìn)制編碼,數(shù)據(jù)內(nèi)容解開后為JSON數(shù)據(jù);
數(shù)據(jù)格式:{“time”:“時(shí)間毫秒”,“data”:“傳輸信息”};
時(shí)間毫秒:1463034885910(實(shí)質(zhì)是當(dāng)前系統(tǒng)時(shí)間毫秒);
傳輸信息:JSON數(shù)據(jù)格式(字符),加密后,轉(zhuǎn)成16進(jìn)制字符串。
下面以實(shí)例說明具體通訊加密方法:
(1)設(shè)備PC向數(shù)據(jù)平臺(tái)發(fā)送鏈接信息
參數(shù)說明:command(屬于字符串,標(biāo)識(shí)當(dāng)前通信狀態(tài)值),sn:(為數(shù)字和字母組成的字符串是設(shè)備的唯一標(biāo)識(shí)),"systime":"當(dāng)前系統(tǒng)時(shí)間作為通信標(biāo)識(shí)",id:(通信流水號(hào)),以下涉及到以上內(nèi)容可為參考。
Id:為通信流水號(hào)從0開始增加,重啟初始化為0;
準(zhǔn)備工作:加密KEY 32位128個(gè)(共同約定)
準(zhǔn)備工作:默認(rèn)解密Key(與設(shè)備共同約定,字符串組成)
(11)發(fā)送信息參數(shù)轉(zhuǎn)換為JSON數(shù)據(jù):{"id"、"command"、"sn"、"systime"};
(12):從128個(gè)加密Key中隨機(jī)取出其一Key,記住其序號(hào),序號(hào)為偏移量最小0最大127;
(13):用32位的隨機(jī)加密KEY加密步驟(11)JSON字符串獲得二進(jìn)制byte數(shù)組;
(14):合并byte為新數(shù)組=步驟(13)二進(jìn)制byte數(shù)組+步驟(12)隨機(jī)加密Key的序號(hào);
(15)將新的數(shù)據(jù)轉(zhuǎn)換為16進(jìn)制編碼的傳輸信息;
(16)獲取新的系統(tǒng)時(shí)間組成JSON數(shù)據(jù);{"time":"當(dāng)前系統(tǒng)時(shí)間","data":"傳輸信息"}
(17)獲得最終加密二進(jìn)制數(shù)組=用默認(rèn)解密Key加密步驟(16)的JSON數(shù)據(jù);
(18)將步驟(17)二進(jìn)制轉(zhuǎn)換為16進(jìn)制;
(19)將16進(jìn)制數(shù)據(jù)POST到平臺(tái),參數(shù)名為d;
(2)數(shù)據(jù)平臺(tái)接收設(shè)備PC信息;
準(zhǔn)備工作:加密KEY32位128個(gè)(共同約定)
準(zhǔn)備工作:默認(rèn)解密Key32位(由數(shù)字和字符串共同組成,由設(shè)備與數(shù)據(jù)平臺(tái)共同約定)
(21)根據(jù)參數(shù)名d獲取16進(jìn)制字符串;
(22)根據(jù)默認(rèn)的解密秘鑰解密步驟(21)字符串獲得JSON數(shù)據(jù);{"time":"當(dāng)前系統(tǒng)時(shí)間","data":"傳輸信息"}
(23)獲取時(shí)間進(jìn)行時(shí)間差校驗(yàn),當(dāng)時(shí)間差超過某一設(shè)定值,本通訊中設(shè)定值為10000毫秒,自動(dòng)算失??;;
(24)將傳輸信息轉(zhuǎn)換為二進(jìn)制,取出隨機(jī)加密Key序號(hào),獲取隨機(jī)加密Key;
(25)用步驟(24)的隨機(jī)加密Key解密;去掉最后一位的二進(jìn)制獲得JSON數(shù)據(jù);{"id"、"command"、"sn"、"systime"}
(26)根據(jù)JSON數(shù)據(jù)進(jìn)行認(rèn)證,認(rèn)證通過后如果設(shè)備唯一識(shí)別碼與數(shù)據(jù)平臺(tái)對(duì)應(yīng),則會(huì)給出一個(gè)登錄Key;
(3)數(shù)據(jù)平臺(tái)回復(fù)設(shè)備PC信息;
參數(shù):command:參考參數(shù)說明,result:對(duì)應(yīng)參考下面描述,"id":"參考參數(shù)說明",登錄Key:認(rèn)證通過后由數(shù)據(jù)平臺(tái)分配出來的登錄Key;
result:結(jié)果狀態(tài)0-失敗 1-成功 2-超時(shí) 3-未登錄 4-異常
id:通訊流水號(hào);
準(zhǔn)備工作:加密KEY32位128個(gè)(共同約定)
準(zhǔn)備工作:默認(rèn)解密Key32位(共同約定)
(31)參數(shù)轉(zhuǎn)換為JSON數(shù)據(jù);{"id"、"command"、"result"、"登錄Key"}
(32)從128個(gè)加密Key中隨機(jī)取出其一Key,記住其序號(hào),序號(hào)為偏移量最小0最大127;
(33)用32位隨機(jī)加密KEY加密步驟(31)中JSON字符串獲得二進(jìn)制byte數(shù)組;
(34)合并byte為新數(shù)組=步驟(33)二進(jìn)制byte數(shù)組+步驟(32)隨機(jī)加密Key的序號(hào);
(35)將新的數(shù)據(jù)轉(zhuǎn)換為16進(jìn)制編碼為傳輸信息;
(36)獲取新的系統(tǒng)時(shí)間組成JSON數(shù)據(jù);{"time":"當(dāng)前系統(tǒng)時(shí)間,"data":"傳輸信息}
(37)獲得最終加密二進(jìn)制數(shù)組=用默認(rèn)解密Key加密步驟(36)JSON數(shù)據(jù);
(38)將步驟(37)二進(jìn)制轉(zhuǎn)換為16進(jìn)制;
(39)將16進(jìn)制數(shù)據(jù)作為內(nèi)容回復(fù)給設(shè)備PC;
(4)設(shè)備PC接收信息;
準(zhǔn)備工作:加密Key:32位128個(gè)(共同約定)
準(zhǔn)備工作:默認(rèn)解密Key32位(共同約定)
(41)獲得了步驟(39)中的16進(jìn)制字符串;
(42)根據(jù)默認(rèn)解密Key解密步驟(41)字符串獲得JSON數(shù)據(jù);{"time":"當(dāng)前系統(tǒng)時(shí)間","data":"傳輸信息"};
(43)將傳輸信息轉(zhuǎn)換為二進(jìn)制,取出加密Key序號(hào),獲取加密Key;
(44)用步驟(43)的加密Key解密,去掉最后一位的二進(jìn)制獲得JSON數(shù)據(jù);{"id"、"command"、"result"、"登錄Key"}
(45)根據(jù)所述步驟(44)的JSON數(shù)據(jù)結(jié)果,如果成功,那么設(shè)備PC記錄登錄Key,在后續(xù)每次設(shè)備PC向數(shù)據(jù)平臺(tái)發(fā)送信息的同時(shí),發(fā)送信息的參數(shù)都加入該登錄Key;數(shù)據(jù)平臺(tái)接收信息后在步驟(26)不進(jìn)行再次認(rèn)證,對(duì)該登錄Key是否匹配進(jìn)行核對(duì)即可。
上述通訊過程中的認(rèn)證,主要是為了保證設(shè)備PC與數(shù)據(jù)平臺(tái)之間通訊安全,杜絕其他非授權(quán)設(shè)備連接。
(1)首次連接認(rèn)證
因?yàn)榭紤]到設(shè)備PC一般一天連續(xù)使用應(yīng)該在十多個(gè)小時(shí),其他時(shí)間可能需要關(guān)閉。所以設(shè)備剛開啟時(shí),設(shè)備第一次與數(shù)據(jù)平臺(tái)連接為了確保連接安全,在正式連接或者傳遞信息之前需要進(jìn)行認(rèn)證。
(2)連續(xù)驗(yàn)證(登錄key方式)
考慮設(shè)備PC與數(shù)據(jù)平臺(tái)連接屬于長連接(數(shù)據(jù)平臺(tái)內(nèi)部要求,在沒有指令或者數(shù)據(jù)通信的情況下,設(shè)備PC也要與數(shù)據(jù)平臺(tái)保持持續(xù)性連接,30秒內(nèi)設(shè)備PC發(fā)起連接請(qǐng)求,如果連續(xù)3次即90秒內(nèi)設(shè)備PC與數(shù)據(jù)平臺(tái)沒有通信連接,默認(rèn)為數(shù)據(jù)平臺(tái)斷開連接)。處于數(shù)據(jù)平臺(tái)優(yōu)化考慮,數(shù)據(jù)平臺(tái)需要通過認(rèn)證,認(rèn)證本身的算法需要一定的預(yù)算方式,也考慮到數(shù)據(jù)平臺(tái)會(huì)與設(shè)備PC頻繁連接,而且設(shè)備PC分布較多,為了節(jié)省資源及從數(shù)據(jù)平臺(tái)應(yīng)用效率考慮,第一次認(rèn)證通過的時(shí)候就會(huì)生成一個(gè)登錄key,此key生成于設(shè)備PC和數(shù)據(jù)平臺(tái)第一次認(rèn)證通過的時(shí)候由數(shù)據(jù)平臺(tái)分配的,而且只適用于該設(shè)備PC與數(shù)據(jù)平臺(tái)通信使用。如果設(shè)備PC與數(shù)據(jù)平臺(tái)斷開連接,再次連接認(rèn)證后,數(shù)據(jù)平臺(tái)會(huì)再次針對(duì)該次認(rèn)證分配新的登錄key,這樣確保連接的安全性。通過這個(gè)登錄key,該設(shè)備PC與數(shù)據(jù)平臺(tái)認(rèn)證就不需要認(rèn)證計(jì)算過程,只需要通過加密解密方式讀取當(dāng)前登錄key是否匹配即可完成簡單的驗(yàn)證。
即通過登錄key方式,完成登錄認(rèn)證以后,在不超過90秒內(nèi)保持鏈接通信正態(tài)下都可以使用key登錄,此方式減少設(shè)備與數(shù)據(jù)平臺(tái)連接時(shí)的登錄操作,減少了數(shù)據(jù)平臺(tái)內(nèi)部運(yùn)行資源的浪費(fèi)。
以上所述,僅是本發(fā)明的較佳實(shí)施例而已,并非對(duì)本發(fā)明作任何形式上的限制,本領(lǐng)域技術(shù)人員利用上述揭示的技術(shù)內(nèi)容做出些許簡單修改、等同變化或修飾,均落在本發(fā)明的保護(hù)范圍內(nèi)。