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

什么是云端計算服務功能?
高效協同,云端先行,Collabora Online 在 FlexusX 上的部署與實戰分享

云端超級計算機使用教程
云端語言模型開發方法
云端ai開發環境怎么樣
云端設備管理系統:開啟高效運維新時代

鴻蒙開發Ability Kit程序框架服務:向用戶申請授權

評論