算法|MCGS用户程序云端授权系统设计

算法|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格式化文本实现数据加密 , 若认为这样的算法不可靠 , 可以对明文进行“加”“减”进一步加密 , 不建议使用“乘”“除”“与”“或”“非”“异或”这些可能导致数据不可逆的算法 , 这里就不再额外加密明文 。