这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 开源硬件 » 疯壳AI人脸及语音识别教程3-5加解密及数据协议

共2条 1/1 1 跳转至

疯壳AI人脸及语音识别教程3-5加解密及数据协议

菜鸟
2020-11-09 16:32:20     打赏

详情地址:https://fengke.club/GeekMart/views/offline/ai

购买链接:https://fengke.club/GeekMart/su_fKw7Nb7oC.jsp

视频地址:https://fengke.club/GeekMart/su_f9cTSxNsp.jsp

官方QQ群:457586268

加解密及数据协议

在《AI人脸系统架构》一节中,我们提到AI设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上《AI设备通信协议》。

使用IAR打开AI_OCR工程,在工程中找到TEA.c,并打开其关联的头文件GeekTEA.h,可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。

image.png 

1.0.1 TEA加解密相关函数

由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。

image.png 

1.0.2 getEncryptSize()函数

接下来就是对加密数据进行拼装以及对数据进行加密,如图1.0.3所示为批量加密函数。

image.png 

1.0.3 加密函数

形参buf为存储加密后的数据缓冲区、sizegetEncryptSize获取到大小、key为加密的秘钥即程序中的globle_Auth_key或者SkeyIS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。

大端与小端的区别在于数据的存储在内存的高低位不同。

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

解密部分和加密部分相似,是一个逆运算。如图1.0.4decryptBatch()即解密函数。

image.png 

1.0.4 decryptBatch函数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

附:AI设备通信协议

一、数据包种类

响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中0xff固定表示秘钥过期,需要更新秘钥,其他以各自描述为准。

请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。

人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。

1、通用数据包

1.1 激活数据包

设备第一次跟服务器建立连接,建立连接后发送该数据包。

数据包格式:

4字节

报文类型

4字节

293字节

Authkey加密字段(88字节)

16字节

66字节

0x01010001

报文长度

公钥

PN

私钥对PN签名

响应结果:

如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。

解析并鉴权成功后,响应的数据包格式如下:

4字节

报文类型

4字节

1字节

4字节

Authkey加密字段(40字节)

4字节

16字节

16字节

0x01010001

报文长度

0x00

随机数

验证随机数

DIN服务器唯一标识硬件id

Skey加密秘钥

1.2 激活确认包

用于接收到激活数据包响应数据后返回确认信息。

数据包格式:

4字节

报文类型

4字节

4字节

Skey加密字段(24字节)

16字节

4字节

0x01010002

报文长度

随机数

DIN

验证随机数

响应结果:

如果解析包失败或鉴权失败,断开连接。

解析并鉴权成功,之后数据交互使用skey加密。

4字节报文类型

4字节

1字节

0x01010002

报文长度

0x00

 

1.3 更新秘钥数据包

用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。

数据包格式:

4字节

报文类型

4字节

4字节

Skey加密字段(24字节)

16字节

4字节

0x01010003

报文长度

随机数

DIN

验证随机数

响应结果:

如果解析包失败或鉴权失败,断开连接。

解析成功,响应的数据包格式有两种:

4字节

报文类型

4字节

1字节

4字节,过期才有该部分

Skey加密字段,过期才有该部分(24字节)

4字节

16字节

0x01010003

报文长度

结果,0x00未过期,0xff过期

随机数

验证随机数

skey加密秘钥

1.4 更新秘钥确认包

用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的skey将彻底无法使用,之后与服务器通讯将使用新的skey

数据包格式:

4字节

报文类型

4字节

4字节

新的Skey加密字段(24字节)

16字节

4字节

0x01010004

报文长度

随机数

DIN

验证随机数

响应结果:

如果解析包失败或鉴权失败,断开连接。

解析成功响应报文,之后的请求将使用新的skey

4字节报文类型

4字节

1字节

0x01010004

报文长度

0x00

1.5 握手包

已激活的设备在与服务器建立连接后,先发送该包鉴权。

数据包格式:

4字节

报文类型

4字节

16字节

4字节

新的Skey加密字段(24字节)

16字节

4字节

0x01010005

报文长度

DIN

随机数

DIN

验证随机数

响应结果:

如果解析包失败或鉴权失败,断开连接。

解析成功响应报文。如果响应结果skey过期,发送1.31.4的包

4字节

报文类型

4字节

1字节

0x01010005

报文长度

结果,0x00 skey未过期,0xff过期

2、人脸识别业务数据包

2.1 人脸注册数据包

人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。

数据包格式:

① 注册开始数据包

4字节

报文类型

4字节

4字节

Skey加密字段

16字节

4字节

不定长

0x01020101

报文长度

随机数

DIN

验证随机数

userInfo

响应数据:

如果解析包失败或鉴权失败,断开连接。

解析成功,开始发送不同类型的人脸图片。

4字节

报文类型

4字节

1字节

4字节

Skey加密字段

4字节

4字节

0x01020101

报文长度

0x00表示成功 0xff表示秘钥过期,无后续字段

随机数

验证随机数

uid

②脸部信息注册包

人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。

1字节

4字节

不定长

人脸类型

图片长度

图片信息

响应数据:

1字节

4字节

1字节

人脸类型

报文长度

0x00成功,其他失败

③结束注册数据包

注册完成发送结束注册包。

1字节

4字节

1字节

0xff

报文长度

0x17

响应数据:

1字节

4字节

1字节

0xff

报文长度

0x00

2.2 人脸删除

用于删除人脸信息。

数据包格式:

4字节报文类型

4字节

4字节

32字节

0x01020102

报文长度

随机数

skey加密串

加密字段格式:

16字节

4字节

4字节

DIN

验证随机数

uid

响应数据:

如果解析包失败或鉴权失败,断开连接。

解析成功。

4字节报文类型

4字节

1字节

0x01020102

报文长度

0x00表示成功 0xff表示秘钥过期,无后续字段

2.3 人脸识别

用于已知一张脸,在人脸库中找到最相似的脸,user_top_num表示返回相似度最高的前多少个人脸 

数据包格式:

4字节

报文类型

4字节

4字节

不定长

0x01020103

报文长度

随机数

skey加密串

(暂不加密)

加密字段格式:

16字节

4字节

1字节

不定长

DIN

验证随机数

user_top_num

Img

响应数据:

如果解析包失败或鉴权失败,断开连接。

解析成功,识别包格式:

4字节

报文类型

4字节

1字节

4字节

Skey加密字段

4字节

4字节

不定长

0x01020103

报文长度

0x00表示成功 0xff表示秘钥过期,无后续字段

随机数

验证随机数

结果数量

循环体

单次循环体格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。

4字节

4字节

1字节

8字节

不定长

循环体长度

uid

人脸类型

double类型,相似程度

userinfo

 

2.4 人脸认证

用于比较人脸与指定用户id之间的相似程度。

数据包格式:

4字节

报文类型

4字节

4字节

不定长

0x01020104

报文长度

随机数

skey加密串

(暂不加密)

加密字段格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。

16字节

4字节

4字节

1字节

不定长

DIN

验证随机数

uid

人脸类型

Img

响应数据:

如果解析包失败或鉴权失败,断开连接。

解析成功,返回数据包格式:

4字节

报文类型

4字节

1字节

4字节

Skey加密(16字节)

4字节

8字节

0x01020104

报文长度

0x00表示成功 0xff表示秘钥过期,无后续字段

随机数

验证随机数

double类型,相似程度

【5】加解密及数据协议.pdf




关键词: 疯壳     人脸     语音     识别     教程    

工程师
2020-12-08 22:22:32     打赏
2楼

挺不错的分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]