跳到主要内容

局域网加密示例

在使用 WebApi 接口进行局域网参数传递时,为了安全,需要对传递的参数进行加密处理(主动推送的数据可以选择也使用加密发送),加解密的密钥(KEY)即在工程中在“数据上报服务器”中定义的私钥,这里加解密算法选择 AES-128-CBC 算法,加密向量(IV)及示例如下:


Nodejs 加密示例

示例:
var crypto = require("crypto");
/* 加密
* @param {string} data -要加密的数据
* @param {string} key -WebApi 私钥 <从 Scada WebApi 配置中取得>
* @description aes-128-cbc 模式,密匙必须是 16 位
*/
function encrypt(data, key) {
if (typeof key !== "string" || key.length != 16) {
return;
}
let decipher = crypto.createCipheriv("aes-128-cbc", key, "abc1234567890efg");
decipher.setAutoPadding(true);
return decipher.update(data, "utf8", "hex") + decipher.final("hex");
}

// 定义加密前参数(以实际参数为准)
/* 获取参数
* machineCode -终端设备的 PN 码
* groupTag -数据上报数据组标识
* tags -通道标识组
* time -当前设备的时间,用于和 timeout 进行时效对比,超出时效将拒绝响应(可使用获取时间戳接口获取)
* timeout -超时时间,<可选,单位:秒,0 表示不超时>
*/
var Data_get = {
machineCode: "7061503910050195302",
groupTag: "group1",
tags: ["B0", "W0"],
time: 1637216657285,
timeout: 0,
};

// 参数类型转换 JSON 对象转 JSON 字符串
var Data_str = JSON.stringify(Data);
// 定义 WebApi 私钥 <从 Scada WebApi 配置中取得>
var Key = "64185fd53af8d9c2";
// 加密结果返回
var result = encrypt(Data_str, Key);

说明

加密前参数属性及详细格式参考 WebAPI 接口说明

WebApi 私钥在 SCADA 中数据上报 WEB API 中获取;

提示

以上示例使用 Nodejs 语言进行编写,不以为最终标准;