《开发教程15AI语音人脸识别会议记录仪_人脸打卡机加解密及数据协议.docx》由会员分享,可在线阅读,更多相关《开发教程15AI语音人脸识别会议记录仪_人脸打卡机加解密及数据协议.docx(12页珍藏版)》请在第一文库网上搜索。
1、CC3200AI实验教程疯壳开发板系列WO1verme-Team2018/07/18目录官网地址:http:WWW.fetRke.c1ub购买链接:http:ShOPII官方QQ群:193836402加解密及数据协议在AI人脸系统架构一节中,我们提到A1设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上AI设备通信协议。使用IAR打开A1C)CR工程,在工程中找到TEAc并打开其关联的头文件GeekTEAh可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。/次uf忿#的长JrunsignedintgetEncryptSIze(unsignedInt
2、size);/拼装出书包.soUtS为源妁数提,SOUE8S工Xe为谆始经Ig大小.UEgZ为拼装结果.31getEncryptSze(sourceSxe)4?voidpackEncrype(unsignedchar*source,unsignedintSourceSizefunsignedchar*target);批量加密.出击内杳.aS长JrCetocryptSxeRf9J1e秘铝上B1色aDIWC1小磷为QvoidencryptBatch(unsignedcharbuf,unsignedintsizerUnSignedcharkeyrintISBIGEHD1AH”/抵量解芒bu婚书而疥斗
3、的地址.iize.*frJJ?.key6fS.a_B1ZEraMCtM1.小戏K.退回1书册口长区.-1出赤*国为unsignedintdecryptBatch(unsignedcharabufrunsignedintsizerunsignedchar*key,intISeBIGeENDIAHJ;图1.0.1TEA加解密相关函数由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。unsignedintgetEncryptSize(unsignedintsize)returnsize+(8-size
4、%8);图1.0.2getEncryptSize。函数接下来就是对加密数据进行拼装以及对数据进行加密,如图10.3所示为批量加密函数。/批量加宓,SiZe为加密数据长度,8的控数倍voidencryptBatch(unsignedchar*bufrunsignedintsize,unsignedchar*key,intIS_BIG_ENDIAN)unsignedintn=size,i;uint32_tk4rb2;transChar21nt(key,0,k,4rIS_BIG_ENDIAN);for(i=0;in;i+=8)transChar2Int(buf,i,b,2,IS_BIG_ENDIAN
5、);encrypt(b,kr0);transInt2Char(b,2,buf,i,IS_BIG_ENDIAN);)图1.0.3加密函数形参buf为存储加密后的数据缓冲区、size为getEncryptSize获取到大小、key为加密的秘钥即程序中的g1ob1e_Auth_key或者Skey、IS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。大端与小端的区别在于数据的存储在内存的高低位不同。大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。解密部分
6、和加密部分相似,是一个逆运算。如图1.0.4为decryptBatch()即解密函数。/批量解密,SiZe为解密数据长度,8的整数倍unsignedintdecryptBatch(unsignedchar*deBufrunsignedintsize,unsignedchar*key,intIS_BIG_ENDIAN)unsignedchar*buf=*deBuf;if(size%8!=O)return-1;unsignedintn=size,i;uint32_tk4,b2;transChar21nt(key,O,k,4,IS_BIG_ENDIAN);for(i0;in;i+=8)transCh
7、ar21nt(buf,i,b,2,IS_BIG_ENDIAN);decrypt(b,kr0);transInt2Char(bz2,buf,izIS_BIG_ENDIAN);unsignedcharoffset=buf0;if(offset8)return-1;e1se*deBuf+=offset;returnsize-offset;图1.0.4decryptBatch函数附:A1设备通信协议一、数据包种类响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中Oxff固定
8、表示秘钥过期,需要更新秘钥,其他以各自描述为准。请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。1、通用数据包1.1 激活数据包设备第一次跟服务器建立连接,建立连接后发送该数据包。数据包格式:4字节报文类型4字节293字节Authkey加密字段(88字节)16字节66字节0x01010001报文长度公钥PN私钥对PN签名响应结果:如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。解析并鉴权成功后,响应的数据包格式如下:4字节报文类型4字节1字节4字节AUthk
9、ey加密字段(40字节)4字节16字节16字节0x010100O1报文长度OxOO随机数验证随机数DIN服务器唯一标识硬件idSkey加密秘钥1.2 激活确认包用于接收到激活数据包响应数据后返回确认信息。数据包格式:4字节报文类型4字节4字节Skey加密字段(24字节)16字节4字节0x01010002报文长度随机数DIN验证随机数响应结果:如果解析包失败或鉴权失败,断开连接。解析并鉴权成功,之后数据交互使用Skey加密。4字节报文类型4字节1字节1.4 更新秘钥数据包用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。数据包格式:4字节报文类型4字节4字节旧Skey加密字段(
10、24字节)16字节4字节0x01010003报文长度随机数DIN验证随机数响应结果:如果解析包失败或鉴权失败,断开连接。解析成功,响应的数据包格式有两种:4字节报文类型4字节1字节4字节,过期才有该部分IRSkey加密字段,过期才有该部分(24字节)4字节16字节0x01010003报文长度结果,0x00未过期,Oxff过期随机数验证随机数新skey加密秘钥1.5 更新秘钥确认包用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的Skey将彻底无法使用,之后与服务器通讯将使用新的skey0数据包格式:4字节报文类型4字节
11、4字节新的Skey加密字段(24字节)16字节4字节0x01010004报文长度随机数DIN验证随机数响应结果:如果解析包失败或鉴权失败,断开连接。解析成功响应报文,之后的请求将使用新的skey。4字节报文类型4字节1字节0x01010004报文长度0x001.6 握手包己激活的设备在与服务器建立连接后,先发送该包鉴权。数据包格式:4字节报文类型4字节16字节4字节新的Skey加密字段(24字节)16字节4字节0x01010005报文长度DIN随机数DIN验证随机数响应结果:如果解析包失败或鉴权失败,断开连接。解析成功响应报文。如果响应结果Skey过期,发送13、1.4的包4字节报文类型4字节
12、1字节0x01010005报文长度结果,OXOOSkey未过期,OXff过期2、人脸识别业务数据包2.1 人脸注册数据包人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。数据包格式:注册开始数据包4字节报文类型4字节4字节Skey加密字段16字节4字节不定长0x010201O1报文长度随机数DIN验证随机数UserInfb响应数据:如果解析包失败或鉴权失败,断开连接。解析成功,开始发送不同类型的人脸图片。4字节报文类型4字节1字节4字节Skey加密字段4字节4字节0x01020101报文长度OXOO表示成功OXff表示秘钥
13、过期,无后续字段随机数验证随机数uid脸部信息注册包人脸类型代码:OXO0:正脸;OxO1左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。1字节4字节不定长人脸类型图片长度图片信息响应数据:1字节4字节1字节人脸类型报文长度OXOO成功,其他失败结束注册数据包注册完成发送结束注册包。1字节4字节1字节Oxff报文长度0x17响应数据:1字节4字节1字节Oxff报文长度OxOO2.2 人脸删除用于删除人脸信息。数据包格式:4字节报文类型4字节4字节32字节0x01020102报文长度随机数Skey加密串加密字段格式:16字节4字节4字节DIN验证随机数U
14、id响应数据:如果解析包失败或鉴权失败,断开连接。解析成功。4字节报文类型4字节1字节0x01020102报文长度OXOo表示成功OXff表示秘钥过期,无后续字段2.3 人脸识别用于己知一张脸,在人脸库中找到最相似的脸,user。PJUm表示返回相似度最高的前多少个人脸。数据包格式:4字节报文类型4字节4字节不定长0x01020103报文长度随机数skey加密串(暂不加密)加密字段格式:16字节4字节1字节不定长DIN验证随机数user_top_numImg响应数据:如果解析包失败或鉴权失败,断开连接。解析成功,识别包格式:4字节报文类型4字节1字节4字Skey加密字段4字节4字节不定长0x01020103报文长度OX