近期公司计划上二维码梯控系统,有提供二次开发包的与接口,但是用C+语言,有没有大神能转换成php语言

与其冥思苦想,还不如让问题交给专业的互联网大神们,至少众人拾柴火焰高。

问题来了,二维码梯控系统,厂家提供二次开发包的与协议规则,但是用C+语言,有没有大神能转换成php语言,可提供赏金,提前拜谢了

  1. 二维码格式

下面表格内格式为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

 

  1. 二维码生成

【开始位】【数据包长度】【格式版本】为明文,其他部分为密文

 

默认加密方式如下:我司为每个项目提供唯一密钥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];
  }
}