博客專欄

        EEPW首頁 > 博客 > MCGS用戶程序云端授權系統設計

        MCGS用戶程序云端授權系統設計

        發布人:成都億佰特 時間:2022-11-08 來源:工程師 發布文章

        MCGS用戶程序云端授權系統設計

        基于HTTP請求通過外接串口服務器實現MCGS組態屏(TPC7062Ti)云端授權系統搭建,重點講解如何實現系統對時(基于UDP協議的NTP對時協議)加密算法的選擇加密算法的設計與實現。

        MCGS云端授權系統設計

        算法實現

        MCGS組態授權管理可以通過“開發平臺”內置的“用戶權限管理”,這種方式基本屬于一次配置授權永久有效,而現在介紹的這種授權方式可利用云平臺修改設備授權狀態,實現更加可控的設備管理

        通過MCGS實現云端授權有幾個難點,如何將MCGS組態屏接入互聯網,如何連接管理服務器,如何進行數據加密與解密,如何獲取當前時間戳(非MCGS時間戳)等困難。

        1.接入互聯網

        “接入互聯網”可以使用市場上常見的串口轉4G串口服務器、串口轉WIFI串口服務器、串口轉以太網串口服務器設備實現,其中串口轉4G對于需要移動的應用場景有著不可替代性,但這種方式存在流量費用。一般來說MCGS組態屏應用于固定環境,此時可以采用串口轉WIFI串口服務器或者串口轉以太網串口服務器,WIFI相對于以太網穩定性較差且易受干擾,接下來小編就采用MCGS組態屏連接串口轉以太網的NA111串口服務器實現設備上網。

        2.連接管理服務器

        “連接管理服務器”為了方便我就直接采用OneNET的HTTP服務器實現,應用場景并不復雜,只需要定義一個字符型變量,并且可以通過“GET\POST”請求或修改變量就行。

        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天等等),為了保證碼值的安全甚至可使用當前時間對碼值進行保護,實現動態密鑰。或者利用云端設置有效時間,也就是需要對結束時間的時間戳進行加密。

        本文僅探討算法和實現方法,有時間講解算法的實現。

        文章來源:https://www.ebyte.com/new-view-info.html?id=2089


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

        蜂鳴器相關文章:蜂鳴器原理


        關鍵詞: MCGS程序設計

        技術專區

        關閉
        主站蜘蛛池模板: 抚松县| 岚皋县| 德庆县| 永寿县| 汝南县| 南和县| 格尔木市| 东兰县| 额尔古纳市| 日照市| 原阳县| 兴业县| 武鸣县| 大渡口区| 遂溪县| 泸西县| 扎兰屯市| 喀喇沁旗| 阿克陶县| 沙雅县| 翁源县| 富民县| 汝城县| 夏津县| 高碑店市| 沭阳县| 平塘县| 诏安县| 皮山县| 老河口市| 鄂尔多斯市| 安庆市| 华蓥市| 靖江市| 鹿邑县| 兰州市| 库尔勒市| 苏州市| 沭阳县| 海盐县| 高青县|