MCGS用戶程序云端授權(quán)系統(tǒng)設(shè)計
MCGS用戶程序云端授權(quán)系統(tǒng)設(shè)計
基于HTTP請求通過外接串口服務(wù)器實現(xiàn)MCGS組態(tài)屏(TPC7062Ti)云端授權(quán)系統(tǒng)搭建,重點講解如何實現(xiàn)系統(tǒng)對時(基于UDP協(xié)議的NTP對時協(xié)議)、加密算法的選擇、加密算法的設(shè)計與實現(xiàn)。
MCGS組態(tài)屏授權(quán)管理可以通過“開發(fā)平臺”內(nèi)置的“用戶權(quán)限管理”,這種方式基本屬于一次配置授權(quán)永久有效,而現(xiàn)在介紹的這種授權(quán)方式可以利用云平臺修改設(shè)備授權(quán)狀態(tài),實現(xiàn)更加可控的設(shè)備管理。
通過MCGS實現(xiàn)云端授權(quán)有幾個難點,如何將MCGS組態(tài)屏接入互聯(lián)網(wǎng),如何連接管理服務(wù)器,如何進行數(shù)據(jù)加密與解密,如何獲取當前時間戳(非MCGS時間戳)等困難。
1.接入互聯(lián)網(wǎng)
“接入互聯(lián)網(wǎng)”可以使用市場上常見的串口轉(zhuǎn)4G串口服務(wù)器、串口轉(zhuǎn)WIFI串口服務(wù)器、串口轉(zhuǎn)以太網(wǎng)串口服務(wù)器設(shè)備實現(xiàn),其中串口轉(zhuǎn)4G對于需要移動的應(yīng)用場景有著不可替代性,但這種方式存在流量費用。一般來說MCGS組態(tài)屏應(yīng)用于固定環(huán)境,此時可以采用串口轉(zhuǎn)WIFI串口服務(wù)器或者串口轉(zhuǎn)以太網(wǎng)串口服務(wù)器,WIFI相對于以太網(wǎng)穩(wěn)定性較差且易受干擾,接下來小編就采用MCGS組態(tài)屏連接串口轉(zhuǎn)以太網(wǎng)的NA111串口服務(wù)器實現(xiàn)設(shè)備上網(wǎng)。
2.連接管理服務(wù)器
“連接管理服務(wù)器”為了方便我就直接采用OneNET的HTTP服務(wù)器實現(xiàn),應(yīng)用場景并不復(fù)雜,只需要定義一個字符型變量,并且可以通過“GET\POST”請求或修改變量就行。
3.獲取時間戳
“獲取當前時間戳”可以通過串口服務(wù)器NA111連接NTP服務(wù)器通過NTP協(xié)議獲取準確時間戳,這里我就通過中國國家授時中心(ntp.ntsc.ac.cn:123)的NTP服務(wù)器獲取時間。
【注】網(wǎng)絡(luò)時間協(xié)議,英文名稱:Network Time Protocol(NTP)是用來使計算機時間同步化的一種協(xié)議。
數(shù)據(jù)加密
這幾個難點中最難的是如何對數(shù)據(jù)進行加密,利用MCGS腳本開發(fā)進行數(shù)據(jù)的加密與解密是比較困難,若一個加密不能被該理解的設(shè)備所理解這樣的加密是沒有意義的,而MCGS并不支持使用加密庫函數(shù)導(dǎo)致加密解密都需要從原理自行封裝腳本,導(dǎo)致不能使用運算過于復(fù)雜的算法,常見的加密算法有對稱加密和非對稱加密和散列算法,接下來分析哪個算法適合MCGS腳本加密,先從安全級別較高的非對稱加密分析。
1.非對稱加密
非對稱加密算法,又稱為公開密鑰加密算法。它需要兩個密鑰,一個稱為公開密鑰(public key),即公鑰,另一個稱為私有密鑰 (private key),即私鑰,常見的非對稱加密算法有RSA、ECC等,他們都有運算復(fù)雜且非常消耗MCU的算力,并不適用于組態(tài)屏的加密。
共享密鑰加密算法。在對稱加密算法中,使用的密鑰只有一個,發(fā)送和接收雙方都使用這個密鑰對數(shù)據(jù)進行加密和解密。這就要求加密和解密方事先都必須知道加密的密鑰。
2.散列算法
散列算法,常見的有MD5、CRC16、SHA1等,嚴格來說他們不能算作加密算法而是摘要算法,他們加密的結(jié)果是不可逆的,常被用于文件完整性以及數(shù)字簽名等場景。
3.對稱加密
現(xiàn)在就只剩下了對稱加密,AES、DES、3DES等都屬于對稱加密,對稱加密結(jié)果是可逆的,算法可以簡單可以復(fù)雜,對于筆者來說,使用組態(tài)屏的腳本程序?qū)崿F(xiàn)AES、DES、3DES仍有些困難,并且寫這樣腳本有點違背使用MCGS的初衷(開發(fā)簡單),MCGS的加密腳本就只能使用對稱加密的思想來實現(xiàn)。
上述這么多的算法留著給那些有興趣,并且熟悉MCGS腳本開發(fā)的人自行探索,筆者這里就是用密碼本加密,為了方便前端開發(fā),就使用Base64編碼表再結(jié)合Base64格式化文本實現(xiàn)數(shù)據(jù)加密,若認為這樣的算法不可靠,可以對明文進行“加”“減”進一步加密,不建議使用“乘”“除”“與”“或”“非”“異或”這些可能導(dǎo)致數(shù)據(jù)不可逆的算法,這里就不再額外加密明文。
使用Base64就需要了解Base64,Base64算法很簡單只需要把3個8位字節(jié)(3*8=24)轉(zhuǎn)化為4個6位的字節(jié)(4*6=24),之后在6位的前面補兩個0,形成8位一個字節(jié)的形式。如果剩下的字符不足3個字節(jié),則用0填充,輸出字符使用'=',因此編碼后輸出的文本末尾可能會出現(xiàn)1或2個'=',使用MCGS腳本實現(xiàn)這一操作也不算簡單但可以實現(xiàn),先將Base64編碼表使用字符串變量一一存儲,比如將base64_list的初值賦予“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”,也可以自定義密碼本(每個字符都必須唯一對應(yīng))對應(yīng)的加密時也需要使用對于密碼本加密,上述字符串順序不可亂,亂了就是不再是Base64編碼表。
MCGS加密過程講解
通過!InStr(1,base64_list,”M”)查找加密字符的碼值,解出的碼值使用!I2Bin(s)轉(zhuǎn)換為二進制字符(不足6字節(jié)前面填零),再通過字符串拼接合成原始二進制字符串,將“=”忽略不轉(zhuǎn)換(因為Base64把三個字節(jié)分成四個字節(jié),不足3個字節(jié),則用0填充,輸出字符使用'='),使用!Mid(str,1,8)和!Bin2I(s)轉(zhuǎn)換為ASCII碼值,在使用!I2Ascii(s)轉(zhuǎn)換為ASCII字符,拼接這些字符串就可以得到明文。
解決了怎么加密,現(xiàn)在需要考慮對什么數(shù)據(jù)進行加密,這取決于我們要實現(xiàn)怎樣的授權(quán)系統(tǒng),比如,實現(xiàn)云端修改賬戶模式,這樣就需要預(yù)先定義模式對應(yīng)碼值表(9573-長期授權(quán),6685-授權(quán)1天等等),為了保證碼值的安全甚至可使用當前時間對碼值進行保護,實現(xiàn)動態(tài)密鑰?;蛘呃迷贫嗽O(shè)置有效時間,也就是需要對結(jié)束時間的時間戳進行加密。
本文僅探討算法和實現(xiàn)方法,有時間再講解算法的實現(xiàn)。
文章來源:https://www.ebyte.com/new-view-info.html?id=2089
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。
蜂鳴器相關(guān)文章:蜂鳴器原理