|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
CC3200AI实验教程 ——疯壳·开发板系列 加解密及数据协议 , ~. U- p. ]' k/ s6 r2 t( l
% W5 w( E: f! t* b+ ~
$ K' c( |+ Z- q& o& n/ I: y
* x- a0 Q, o1 T& m: D 在《AI人脸系统架构》一节中,我们提到AI设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上《AI设备通信协议》。
9 q2 O, |5 {& ^ 使用IAR打开AI_OCR工程,在工程中找到TEA.c,并打开其关联的头文件GeekTEA.h,可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。% V$ o+ T' I' ~. U5 M
& }3 r8 W; H6 B" B4 o8 C9 n
1 K K6 l: w- S8 }
图1.0.1 TEA加解密相关函数/ E' r k$ q4 O( z% r" d/ R6 G
图17 S2 ~$ v8 Y7 b2 k' u+ J* ?% W9 F; _
由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。
, x9 C8 y/ h: d1 k* s3 c& I" f% F Z* i: _( y
: ?0 ^* A: i# G0 m 图1.0.2 getEncryptSize()函数5 m/ j9 g2 V6 A* h/ m, c" l3 p: B
图2& t P& L; d- a: d( c
接下来就是对加密数据进行拼装以及对数据进行加密,如图1.0.3所示为批量加密函数。0 j! K8 O0 W. J5 {; Z
* {& t7 a0 Y4 I$ q/ ]/ H2 H
* s* {8 V N7 Q/ k 图1.0.3 加密函数 . `5 N5 N3 k/ L) Z A/ f; b( `6 Y
图3
1 U( E, _0 G* R g' r9 r# F: N 形参buf为存储加密后的数据缓冲区、size为getEncryptSize获取到大小、key为加密的秘钥即程序中的globle_Auth_key或者Skey、IS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。
: x9 t/ H6 u- e( ^. A 大端与小端的区别在于数据的存储在内存的高低位不同。7 w/ ]1 j* T6 Z% E
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
1 X% ~# u, M+ y& W: U$ S( b 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。+ O; x2 e& P$ k+ ?8 e
解密部分和加密部分相似,是一个逆运算。如图1.0.4为decryptBatch()即解密函数。
$ {; m# _3 U; Z% `6 R
' X) M: D c3 M: g* x Z
' o( |% Z# u- ^8 v) r( A7 v
图1.0.4 decryptBatch函数& Q3 e; Q0 X! @8 l W# F& h( g
图49 O! z- ]9 }. ~
$ }! \9 ?3 T/ \( |9 s6 a7 c1 D2 M; }) j5 f/ m5 d' m! S7 z
. V: E+ u, X# D' D9 B3 l9 a
附:AI设备通信协议+ N; ]8 {7 l9 H( {1 w- ]
一、数据包种类
" q2 S2 n: b, P- G+ R 响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中0xff固定表示秘钥过期,需要更新秘钥,其他以各自描述为准。; P" J! [$ x( n8 z {& m3 ^* Q% H
请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。
0 D& N7 G! y3 b' I+ t/ O 人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。
9 h; t9 W# o8 W# @& K3 d9 { 1、通用数据包7 J8 t+ H9 \) ~$ J2 K8 E& j
1.1 激活数据包
; A% \8 ^2 _) p! P8 L! m& R; X 设备第一次跟服务器建立连接,建立连接后发送该数据包。% H5 S+ i a3 e
数据包格式:# x7 g+ z" o. J R0 |' h* [; k# K
; B% n- N/ \2 k# }8 [/ b2 M4 B3 f8 C
4 Y: Z% ?# h' k; J g
表1
' B9 P4 B8 `; l2 W# u6 z, c( }7 U 响应结果:6 c- H$ K8 O3 w& C T3 q! E8 {: P. K
如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。; Q0 \0 J: q8 n! ]3 x" w4 }5 @
解析并鉴权成功后,响应的数据包格式如下:
9 b1 D. s5 k2 T; V8 V' f/ e. U# ~! Y* M/ }+ x' R
6 U& K5 j* h4 O( i; x5 U. C0 H f
表26 B2 y! K% c9 N! B% O
1.2 激活确认包- H/ ]& c& E0 J& X- c/ U) e, G
用于接收到激活数据包响应数据后返回确认信息。
) S, G: I/ ]* G 数据包格式:1 k) Z2 @, w( b
$ S6 S6 l2 B* C$ i9 b% M
5 K# h* O1 p7 _+ g) p
表3' M! @" o# G4 l" I6 _3 o
响应结果:
% f: z: ~ a% ] 如果解析包失败或鉴权失败,断开连接。8 N+ _8 u1 o5 N& H* u7 O% j
解析并鉴权成功,之后数据交互使用skey加密。
9 \. y `; J9 J$ y$ T- T6 W& C. O2 G9 T& y
+ {, M) m2 _0 o7 @5 N 表41 Y9 ?2 Y' z+ F+ {3 A2 M* u0 u
1.3 更新秘钥数据包
+ m; N6 k" g6 |& r; ~8 H( ^ 用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。 n' N% x a; c3 e1 }8 Z8 W0 p
数据包格式:3 Z/ c2 e+ x/ e. W
* t6 l/ W) q7 [( S2 \
7 L7 _2 v7 n% E' Q 表50 K z- Y0 X0 i) C' P; i4 Y( n
响应结果:
5 B7 \4 }0 V# `4 r# a0 K7 ? 如果解析包失败或鉴权失败,断开连接。
& t" N- A. _! @5 v3 I 解析成功,响应的数据包格式有两种:' u8 q: A. s4 R; J
' I- V) W. s; A& V8 t
% z9 _, Z4 w3 Y# Z. B 表6
2 E. m, C, @! L! ~ 1.4 更新秘钥确认包
0 ?% ~& p; f1 v; w6 V3 w4 y 用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的skey将彻底无法使用,之后与服务器通讯将使用新的skey。$ O$ @8 W$ Q* q" n
数据包格式:0 W1 V7 a, K; Y1 C) C* z8 r
; r9 P8 G4 ~# _
^( {! o4 Q3 Z( o: ] 表7( |) P$ m. A! A, T& m# z: U1 D
响应结果:
5 ]# v% H( V* r: i* H0 n( n 如果解析包失败或鉴权失败,断开连接。5 E* R _/ \ h* J! @
解析成功响应报文,之后的请求将使用新的skey。9 L6 x: \( a$ i
7 H6 N8 O* y# o1 T
$ i7 W7 a- M- E% k 表8
4 h7 J$ O1 n4 U/ z) S 1.5 握手包4 f2 t" d* L( ?8 M$ ^2 c) i' \
已激活的设备在与服务器建立连接后,先发送该包鉴权。) E0 w. C. H* L5 W
数据包格式:
+ |2 S" O) X L
. ]& N8 w- J3 q1 G
( D3 j4 V# O( r8 V4 s- H2 r. ?
表95 b- s/ A4 Q; t: U$ P1 U" o k
响应结果:
, n* p; N ]% O3 \ 如果解析包失败或鉴权失败,断开连接。
" N8 Q3 V8 k2 L 解析成功响应报文。如果响应结果skey过期,发送1.3、1.4的包/ L2 d" @8 @3 { ~
8 Y# Z9 h! v( K2 W- }
, r0 j7 R* T# }) O: v 表10, R: a5 B8 I/ ]* h4 \! s) u
2、人脸识别业务数据包# S+ ~2 e( U' K7 A0 D- p T* L
2.1 人脸注册数据包# t- `0 z0 O/ R C Q' w
人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。; [8 k0 v1 O$ x4 K, z: i
数据包格式:& T2 m7 K _* F& e1 Z# O: Q+ k, j# }
/ U7 l5 `6 P5 S, L* k
& u/ W9 N: o x: O0 I 表11
# H% Z; K0 N4 B4 q 响应数据:' u8 F3 f& P' p4 k1 V! Z% ~: c1 Z
如果解析包失败或鉴权失败,断开连接。" x9 U. {: [9 n( J8 U4 W9 s( ^7 C
解析成功,开始发送不同类型的人脸图片。
( ]$ u6 W2 W, Y$ L' d" Y4 Q3 `- p: G' o' U' h6 y( r1 J! c
: G+ A0 @) r a6 O8 j7 ?: ^
表123 t- Q6 Q, q9 ]& ]3 O# v
②脸部信息注册包
& Y# o. e9 o) P 人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
C6 j$ B6 A: c9 s' U2 {
$ C% P; M) b& E8 A0 w8 T
1 @0 M5 R: ?$ i0 Y4 A1 v 表13# X0 y2 D# J8 U( g5 U( X5 Q0 P
响应数据:( [( B. O4 e3 a# m' e8 T3 l3 ~
: w+ D6 Y6 ]' @8 y+ N
/ T4 J' ]# x' ^7 A! E# U( }, M 表14; W8 z$ `) e: j/ K+ R/ l; D- l
③结束注册数据包. p+ |+ h: V! C' g
注册完成发送结束注册包。
6 _. M' a* r+ p: {3 H. d
9 Y% h5 M6 U. Y& s7 z
2 `' _, h' [, Q
表15
; j3 Q# n) _: s% N* K- g 响应数据:
; c& j. D) S( J4 K4 N; I' ]( ?! R3 Q% v. M4 E% l* V
! N5 s! H) }: T8 _4 i/ T
表16
' D$ X6 o Q' D% W% [ 2.2 人脸删除
% l4 l9 w* T- E2 c 用于删除人脸信息。
( V7 S& {6 N* I9 H5 l. Y$ z 数据包格式:
e' h8 Y& v# C+ C( w- F. E2 \( t3 |: I* p2 N L
; v9 ?% p, n1 u+ x( Q( ^* `6 t1 L. Z
表17
+ P- P; b6 y8 @7 }6 ] 加密字段格式:5 j8 Q& w# \2 u4 W
- y" r0 ~! ?: R, m& q- S+ B
# [0 u% I6 c6 ~) |1 G0 A
表189 P3 b2 c3 y# Y' q
响应数据:
4 w# M9 l F) F1 v 如果解析包失败或鉴权失败,断开连接。
! H' L- s" b! x& Y 解析成功。
& l, [8 {- V- a# f) v% @6 U; ~& d4 ^* Y' ?
" F; [' f7 {, i; ?) G- B
表197 t$ @. o0 X) ]
2.3 人脸识别 ^ | Y' L. V
用于已知一张脸,在人脸库中找到最相似的脸,user_top_num表示返回相似度最高的前多少个人脸。
. h0 _& g# ?. m8 q 数据包格式:
8 ~. S0 {- ? F7 g
2 y* X( H) P" m( H) w2 y
1 D5 x! W% ]6 x8 ] 表20
2 @5 J1 i5 U/ ~ y 加密字段格式:
U0 R! e+ G/ d1 m8 C' J/ I; a1 {3 ^) S0 f
7 r- f3 Y3 Z1 R3 j" H2 V 表213 J4 ~' B4 l) O7 T8 r
响应数据: B% |1 M8 X" @- A" E( E
如果解析包失败或鉴权失败,断开连接。
4 F7 M7 j" V9 j 解析成功,识别包格式:$ s- }# `& y( k
, @7 x4 i2 t) C1 \9 R
- v' a8 k, g4 p, G% Y6 I4 ?" J
表22
o& b0 o5 m7 i; y7 W 单次循环体格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
# ~4 p1 _- N1 D& F' O# x" J2 n! ~8 l7 f
$ {- G6 q1 U- w/ O, ~ 表23
8 W) P# N0 i2 }; ]6 t6 f, i# I 2.4 人脸认证% i; r! V+ @" k2 N
用于比较人脸与指定用户id之间的相似程度。
" F2 a3 k S {! D2 T0 |$ y 数据包格式:& M- o4 \8 Y% X( Q
- w0 x6 v4 J/ O0 u5 w T/ E3 @
# I8 j# H# F1 m" ?) o
表247 m3 }6 E2 m6 T
加密字段格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
4 }1 Z0 K i7 |8 g( k9 f
; g6 o' F7 f2 @2 k
) v& ], P9 g$ c 表25
, f2 P- P: {0 m/ N0 l0 Y 响应数据:) Y% V6 O% ]1 N5 w3 E, Y" A; y
如果解析包失败或鉴权失败,断开连接。
! T& ~2 H. j$ ~2 j9 X6 X/ r 解析成功,返回数据包格式:
; Z+ M- Y5 X7 g/ h- x* v# T
, z# L0 z9 U4 [
- r `3 ] K- `8 r) g# E) S 表26
% A; H$ \# L- U; w9 h, ^4 w
' E( M! Q+ n/ j6 D2 ?
" P( e! U) _- u7 p0 Z: G# u/ D, Z* X, a' ^8 }$ B
+ C6 K- D- u5 {1 X+ C8 C5 ^
5 P$ t4 \& S. V) c% G 文件下载请点击:
【5】加解密及数据协议.pdf
(688.68 KB, 下载次数: 0)
$ h) L* C, a3 l6 r/ O
8 R; b% ^; H; z; R5 Z% [" a9 U8 }5 u* E L i& p
1 [# H ]$ k$ t( v" ]
+ Z- Q2 h4 ?+ E$ N8 M8 {1 A5 h
* @! l" V: D, \: _+ B, f |
|