找回密码
 注册
关于网站域名变更的通知
查看: 142|回复: 0
打印 上一主题 下一主题

【开发教程15】疯壳·AI语音人脸识别-加解密及数据协议

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-10 14:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
CC3200AI实验教程
——疯壳·开发板系列
加解密及数据协议

1 |4 }1 U. E6 q9 @! Y  d) p2 @  b+ @4 r9 Y( |( B: P+ z+ g
6 C5 t; M9 g- ~# E! Y! C
& i% _8 v$ B6 I4 w  v5 |2 l7 n
    在《AI人脸系统架构》一节中,我们提到AI设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上《AI设备通信协议》。3 s! N+ D6 e5 {) B
    使用IAR打开AI_OCR工程,在工程中找到TEA.c,并打开其关联的头文件GeekTEA.h,可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。
- ^& n1 j) o3 u2 }
9 z  ]9 p" z) M5 }  T   1 P8 s2 l4 Z! W6 d
    图1.0.1 TEA加解密相关函数
. k4 ^4 }) w; L( l    图1
) g1 t+ N: ^9 G, r6 |& v    由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。' e( K5 \3 ]8 X' j/ {* ^5 {) Q
, P# y1 W$ i" ?8 L
   " p5 B4 T  w# Q2 v1 n2 z
    图1.0.2 getEncryptSize()函数
' Y4 j, e* J  e    图27 g5 h4 R# @7 }. A( Y# y
    接下来就是对加密数据进行拼装以及对数据进行加密,如图1.0.3所示为批量加密函数。4 n# S0 m# T( n0 z; P5 h/ m1 J+ B
. I! g" e! o2 d0 N' B' N
    # W' r. K  g: ?# N4 n
    图1.0.3 加密函数
7 t% B5 }# B! Y    图3
1 O$ T3 C* q) i7 L& {6 e2 P    形参buf为存储加密后的数据缓冲区、size为getEncryptSize获取到大小、key为加密的秘钥即程序中的globle_Auth_key或者Skey、IS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。4 l& r5 f3 q- v' k% f
    大端与小端的区别在于数据的存储在内存的高低位不同。" [  u9 f. `' [  }
    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
3 {+ r  A1 F; i3 K* M    小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
9 ~! E. _# J7 N- b& ]5 P    解密部分和加密部分相似,是一个逆运算。如图1.0.4为decryptBatch()即解密函数。
6 U: Q  s8 n+ h$ N
" z$ r0 Z3 v% C( B    : Q2 E$ U  I# i: v
    图1.0.4 decryptBatch函数
0 h# L8 d; t  B9 l* w& m; n    图4) e* ?2 v4 {: N$ `) u/ L
) j: n$ i4 a* s/ t
( S/ N' p& o: @2 d5 G- O

; Y, |/ S4 w8 h; C* w! d3 M    附:AI设备通信协议
1 y, N: }* e# W6 c- K' Z/ x7 V    一、数据包种类; }. {7 D" v' D- ^3 v
    响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中0xff固定表示秘钥过期,需要更新秘钥,其他以各自描述为准。
2 ^. k0 V0 q& M9 u4 Y% b    请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。
9 C% D3 j- A0 w1 H& z    人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。
+ l, C0 X7 g/ A* r4 e0 M$ W8 J    1、通用数据包
, B0 N0 Z4 h. Z! `, g( O    1.1 激活数据包
1 ?1 N) ]' n5 N/ M9 V    设备第一次跟服务器建立连接,建立连接后发送该数据包。4 [2 a1 S/ \/ x& P8 V; f/ L  D+ p
    数据包格式:9 J. X) I4 f% M/ ~& M4 o
& O8 K0 e0 D, m$ G1 U2 V7 `' q
    2 Z& a$ O. q( v
    表1
" O  u! L' P1 ^9 ~( v" f    响应结果:
5 W4 o' `% p4 f; P0 V    如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。
$ N& k" `. A3 w6 H+ ?    解析并鉴权成功后,响应的数据包格式如下:' l* R' y: M' n' V& O

- r  a2 E9 p! L    
: O1 {, a- F3 o6 X  C    表2
; C7 k; R4 k, C    1.2 激活确认包5 O5 K! G! u" z* z- Q
    用于接收到激活数据包响应数据后返回确认信息。
$ P/ a' t( c: s+ @. H" m    数据包格式:
/ Q6 w1 ^) [- c4 ?- j
3 P* \7 a2 Z$ ]4 Y3 f     9 S" l' S! z2 r; |" y) m* T$ Z9 |) P
    表3* S0 A& C0 T) v' M0 R: v
    响应结果:
0 [& ]4 V0 M0 [. U3 k    如果解析包失败或鉴权失败,断开连接。
. D! S/ x3 d: k    解析并鉴权成功,之后数据交互使用skey加密。3 x# Y$ ]4 N) @+ {' \8 _

) g% i% N3 t9 \: s5 c+ V0 O- B    
" p# K- K* O: ?  S8 z    表4
8 O, S0 R( x5 }5 s    1.3 更新秘钥数据包
- {5 q- t5 d/ h' O* g( @' ~; E6 g    用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。- D- N+ e' N6 B
    数据包格式:! j; b* e# x, T. s
7 A4 H2 L$ H' Y" k
   
* W5 W% v9 F4 f, `; W    表5# w; J. X# M! K( r4 X* |5 U) j+ ?3 `
    响应结果:
4 K2 [( I! a+ b) u' ~    如果解析包失败或鉴权失败,断开连接。
& z3 b1 d. S/ f$ D    解析成功,响应的数据包格式有两种:
$ r) n+ d, k4 Z7 @, N3 b; Q% q# b: u9 S; S0 ^1 ^) G
   , ]: a' N5 l' _/ T& E0 X& K
    表65 [. A2 j' @3 S' D, z
    1.4 更新秘钥确认包
5 d. c/ ]6 x# I  Q    用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的skey将彻底无法使用,之后与服务器通讯将使用新的skey。
4 s3 o7 }% |/ P) ~9 L    数据包格式:
& E0 q$ K+ N9 s5 b$ b! e
3 ]4 ?/ R! x9 }2 D8 X- W, O+ ]* [    
- {# U! ~/ e$ l  Y  M5 r    表74 V' d3 J5 M# G. @
    响应结果:
- ]2 A* L4 R2 p, T# N% v! q    如果解析包失败或鉴权失败,断开连接。
7 ?1 }3 r1 x7 y) E    解析成功响应报文,之后的请求将使用新的skey。
' a- Y$ b8 r( S6 M9 L6 l$ H; [0 A! d6 g0 `2 d; {
   
" c2 B$ T( s; |9 [% U5 E2 z    表8
* P9 S  G) H3 e8 E$ K! `  m    1.5 握手包
7 \( |/ N/ j  x* u6 @    已激活的设备在与服务器建立连接后,先发送该包鉴权。
$ R' v: o1 C, Y6 [/ _- j" o    数据包格式:9 s9 {, V6 W% ^9 H

/ O7 m/ Z; T. l. |& u   2 y0 T$ X4 i5 T. ^2 Q/ [8 x# ]+ L
    表9
. k; ]8 ^( F' Q  F7 v) C. |* `    响应结果:, {: u* Q: o1 F0 P7 H# P4 S! R
    如果解析包失败或鉴权失败,断开连接。& f- N5 ^$ ]0 }% G! t1 Y
    解析成功响应报文。如果响应结果skey过期,发送1.3、1.4的包
4 z( o3 m1 p- e7 Q( l. E) ]3 n: L* u% s  z7 W1 E  ^% c
   
9 L  z4 a$ O* j8 q) _    表10' V& N* _2 h- x4 [& K. n5 L+ }1 g
    2、人脸识别业务数据包
" k$ W3 f( O2 m! E- K/ Y    2.1 人脸注册数据包
3 L; y8 x3 a* o6 h- G/ q) p    人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。& ?% @! j9 Z; T; |( Z
    数据包格式:
& Y" y% F+ N; L! J( L) ]
8 A8 g/ i3 W  V# v& q    
: U+ h0 n1 a- G$ N  u    表11
8 C- g* z( a5 g3 U$ M9 O- @    响应数据:
. P3 L/ [5 [5 c) L& n7 Z    如果解析包失败或鉴权失败,断开连接。
* l) C. r7 \; B/ G5 H( P4 ^, |! y    解析成功,开始发送不同类型的人脸图片。. e& C6 F& `7 m& z% f

' N. Q' o0 t4 P* O    
6 Y" _' ^) B( [. Q/ `, U, J  S    表12
7 [; v( K9 H' r; a) u# D2 I    ②脸部信息注册包' @1 S, x& F, K% S
    人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。9 x' \) {7 S  O) H$ m" C6 U; J, X
! g9 d8 ]6 r/ l
   
+ u8 K+ V- Y! U) y7 ]. S- R9 _  b$ Y    表13. g9 K! v5 `. H& U
    响应数据:
3 u% V( B8 m+ ?" T( ~! [
, F! z. }: Q9 I5 h' @4 T     " j) U, k8 K1 V- E* ~
    表142 }0 v1 z: b% e9 T6 }7 Y# B& f
    ③结束注册数据包8 U) u% g' F* M5 b" K( N- R# u
    注册完成发送结束注册包。. S+ g1 S4 F8 u+ ~1 j7 J% t

& M1 H% q3 c0 Y+ e( N     # n/ M2 z, C3 r$ w; g& R4 R+ N
    表15" V: z5 z: Y4 J# Z8 f
    响应数据:
) d7 Y9 n7 U4 M* V6 F, @, h# N- Y( r  \# a+ k
    & A4 X3 `, U' W3 E
    表16  \( y/ j' t% z* G1 E6 R
    2.2 人脸删除
* u  ~& r0 E% }& x    用于删除人脸信息。) G0 F8 h  J* k7 n5 f: |" `
    数据包格式:4 y. f3 G# b+ x$ v! ~

$ A4 e9 D) [' Y* d, `* h9 o: }1 {3 J    5 T6 o( y( Z, k1 i+ M
    表17
) h: B% J1 q1 I: p9 B! r    加密字段格式:; g) q% ^/ C- K: b( K# v: t( U

* W% ]" c+ ?, O, A/ k     , h1 G6 A6 m7 `5 t
    表18
. U8 T8 W) F% ~5 I2 U% D    响应数据:; u. M, W: g/ V, B
    如果解析包失败或鉴权失败,断开连接。
) I  w# @7 `" ^5 W2 r* A# a    解析成功。  g# \) z- J- F1 Y/ A

) c, b) l% }+ v( E' q+ \0 h. O ) F! M8 w# _% H+ c" B5 {3 H3 h, z
    表19$ ~$ j- k/ s0 `; ~, {; M* e
    2.3 人脸识别
& H1 [0 K. V3 r2 z1 H" l    用于已知一张脸,在人脸库中找到最相似的脸,user_top_num表示返回相似度最高的前多少个人脸。
2 [, D; k' \% m! _) F3 }$ `; j8 }    数据包格式:1 A: z+ w: g7 T7 b$ x/ |

. o( p6 X0 N" Y    
* _' s$ q4 I$ I/ @% T8 h/ x    表20" k, U0 h' _# b0 T. Q0 K
    加密字段格式:
7 P7 X( ]1 ^, f5 j6 \% m; F+ h9 J/ c9 N& K
   + Z" j) t4 r1 {& L) p! v) W
    表21
0 W* W3 F4 f: j: [7 R    响应数据:3 T7 H2 [4 N/ V+ k2 Q+ {/ o
    如果解析包失败或鉴权失败,断开连接。
3 P" q7 f( X% n    解析成功,识别包格式:
; o/ T" l, k2 N0 B
& I- {( c  l& U! r2 E: o! m4 U    9 U, p  E& u; w! t" i% G
    表228 f2 }0 w8 ~9 `! J5 F& y- g; L0 O
    单次循环体格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。% I! C$ K5 h8 f+ T% s4 R
5 Z- ?  @" P' [7 J& D
   
- v" U0 D$ b7 x8 }1 L    表23
+ ], ^* K; r+ q- M/ \" [8 x    2.4 人脸认证5 d/ y" X- h8 v4 U
    用于比较人脸与指定用户id之间的相似程度。* h/ c5 j; Z1 o  f) g/ Q5 b
    数据包格式:
. {4 {$ g0 T% H) G1 ?' G& b1 g. N
: ]- X3 w$ p; ^     - e2 n6 u; c; d* ^5 e3 i
    表24* g8 J5 H( _# k  \
    加密字段格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。1 h; `9 }% z- Z4 ]' s

( R" F- y/ g+ V- p$ I7 _: x" u     + ^$ U6 ?; R  ^4 q' C4 m' h
    表256 E5 z5 P% F9 F' f- t
    响应数据:
$ d" T1 ^7 }' P* w! B/ y    如果解析包失败或鉴权失败,断开连接。9 ]- ]( f) d9 w9 B: h) ~
    解析成功,返回数据包格式:% V4 N/ I. n1 B, E! Y0 r
0 p& \/ E& \7 o
   
% A" G( l3 n+ e. j    表26
6 q7 H2 w- U& w' r/ p- W7 c" ~  K  ^) C
3 B( A0 F# ^) I- Q
, ~/ W+ ^2 T+ S
- `8 T: \1 f. k5 O$ i/ T, T8 D& H2 k8 N: ~

3 a9 H3 |5 R- c' e    文件下载请点击: 【5】加解密及数据协议.pdf (688.68 KB, 下载次数: 0)
$ Q! i# G- \( s; x3 C! u5 @2 K+ |; I+ N* i& m

, `/ b% d8 l1 d9 |) H) c; I" T! ~+ q; J. x: t5 l

. |4 y) d: Y# \+ ^1 m
9 `* Y" Z0 o0 _9 P# Q; {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 09:12 , Processed in 0.156250 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表