与其冥思苦想,还不如让问题交给专业的互联网大神们,至少众人拾柴火焰高。
问题来了,二维码梯控系统,厂家提供二次开发包的与协议规则,但是用C+语言,有没有大神能转换成php语言,可提供赏金,提前拜谢了
- 二维码格式
下面表格内格式为HEX,生成二维码需要将HEX格式转为ASCII格式
开始位 数据包长度 格式版本 数据包
1byte 1byte 1byte N byte
A5 XX 02 XXXXXXX
数据包长度:目前为23, 数据包长度(【格式版本】开始字节到【校验】最后字节数据字节数)
数据包格式如下:
例子:16进制字符串,下面是明文,未加密的数据
A5170200000001065F9DFA8000050105030400000000000071
A5 17 02 00000001 06 5F9DFA80 0005 01 05 0304000000000000 xx
开始位:A5
数据包长度:17(16进制=17,10进制=23)
格式版本:02
用户ID::00000001
用户类型::06=普通用户
启用时间:5F9DFA80 (2020/11/01 08:00:00)
有效时长:0005 (5分钟)
梯控权限地址:01 (1号梯控控制器有权限)
楼层表:05, (1号梯去端口5对应的楼层)
用户卡同一部电梯默认不支持去多个楼层,用户在手机界面上切换楼层,二维码变化
门禁权限地址:0304000000000000, 3,4号门禁控制器有权限
校验:71
- 二维码生成
【开始位】【数据包长度】【格式版本】为明文,其他部分为密文
默认加密方式如下:我司为每个项目提供唯一密钥16字节
如:378DFDF42B029488575B88FA3C2BB49E
加密只对【用户ID】开始字节到【校验】结束字节部分加密
上面例子只对这部分加密00 00 00 01 06 5F 9D FA 80 00 05 01 05 03 04 00 00 00 00 00 00 71
00 00 00 01 06 5F 9D FA 80 00 05 01 05 03 04 00 00 00 00 00 00 71
37 8D FD F4 2B 02 94 88 57 5B 88 FA 3C 2B B4 9E 37 8D FD F4 2B 02
前16字节和密钥分别异或, 后6字节和密钥前6字节分别异或
{
u8 Gen[16]={0x37, 0x8D, 0xFD, 0xF4, 0x2B, 0x02, 0x94, 0x88, 0x57, 0x5B, 0x88, 0xFA, 0x3C, 0x2B, 0xB4, 0x9E };
u8 Buf[22]={0x00, 0x00, 0x00, 0x01, 0x06, 0x5F, 0x9D, 0xFA, 0x80, 0x00, 0x05, 0x01, 0x05, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71};
u8 i;
for(i=0; i<16; i++)
{
Buf[i]=Gen[i]^Buf[i];
}
for(i=0; i<6; i++)
{
Buf[16+i]=Gen[i]^Buf[16+i];
}
}