|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
CC3200AI实验教程 ——疯壳·开发板系列 加解密及数据协议
$ o3 H0 V7 i: a5 N; \5 w: ?
6 _9 ~; b; E( E% W& j i3 X/ I" F- N; b! f1 F
( ~3 t. |* Q5 s$ [- \- F m' c& y. a: F8 m
在《AI人脸系统架构》一节中,我们提到AI设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上《AI设备通信协议》。
" w2 X7 F, ?' Z# A9 T" I# Q 使用IAR打开AI_OCR工程,在工程中找到TEA.c,并打开其关联的头文件GeekTEA.h,可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。
( J/ O0 z5 X/ G4 X+ B. k/ G% ~3 T: K C. J k
4 g9 m' X( H, B
图1.0.1 TEA加解密相关函数/ [9 X* i3 P4 @( l' l
图1
- W: A; T+ D4 w- M, B8 G( a+ c2 x 由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。
) o& U7 s" d) V( D
. o) j1 k/ A9 @0 o8 C* G& b' W5 C
) e3 s+ I6 z. f) E7 }9 H( a0 F
图1.0.2 getEncryptSize()函数
4 C/ y% n2 T8 g9 a& o4 E. m 图28 v$ j; s; \2 a! E
接下来就是对加密数据进行拼装以及对数据进行加密,如图1.0.3所示为批量加密函数。
1 {# v D9 A+ \- M7 y) `, X3 K/ u& k1 n# s3 l
* ~* f; k/ a4 P 图1.0.3 加密函数 0 q* q# y% {7 a6 r, o% G* F
图3. Y5 }5 V* h4 y+ q* Z! C
形参buf为存储加密后的数据缓冲区、size为getEncryptSize获取到大小、key为加密的秘钥即程序中的globle_Auth_key或者Skey、IS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。
3 |+ s( C; d% b0 i2 C 大端与小端的区别在于数据的存储在内存的高低位不同。
7 W1 q: |9 U9 `: M+ ^4 [ 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。 x9 q2 M0 H# E7 _9 k+ g% J1 o
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
; E" _7 ^' i" }. f7 a9 T# a/ ~ 解密部分和加密部分相似,是一个逆运算。如图1.0.4为decryptBatch()即解密函数。
7 t* {) h( [- y' ~2 g
4 x3 Z6 |' H* z; A
/ z# Q& w- R9 h
图1.0.4 decryptBatch函数& l5 f9 \7 _/ [7 i, z
图4
9 L# N0 c" h. e
- D6 F8 t6 U' F+ \( M
$ g4 f% D, k) x2 r8 z8 ` J) E( }
' U# I2 }& x4 m1 K6 K' U- m 附:AI设备通信协议. @2 q6 E, j/ S- P* P% W' R, S
一、数据包种类) T; P) {: d! p9 u
响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中0xff固定表示秘钥过期,需要更新秘钥,其他以各自描述为准。+ @: C( q9 l* x# l: u6 k
请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。
( c' t; N( h* F' W 人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。
" j' q$ a+ o# ], ^ 1、通用数据包
$ I `/ Z! M, C 1.1 激活数据包! |; `6 R9 y2 I
设备第一次跟服务器建立连接,建立连接后发送该数据包。
+ o) F: _* r% h! { 数据包格式:
: U& B% b& K$ B' M- R/ H* }* H9 z* ~% S9 g; b
9 N( X/ H2 q( {4 r1 b: @
表1
6 }7 L* [3 v4 O3 l, |6 ?9 D1 c; ~ r 响应结果:
& A( d2 B' x, B# O6 z- f( z 如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。
4 {) Q+ ^: w4 G7 r* x" q3 t 解析并鉴权成功后,响应的数据包格式如下:5 S" k& D. ]6 @ R$ ~. o
! s& ?6 P4 q; e" D& ?/ }3 h# K
6 H) ~$ ^) `# I6 O9 y P$ \8 [
表2
7 I' R* a) O3 n7 B& b9 d 1.2 激活确认包" X* m8 u' h# z8 k! N
用于接收到激活数据包响应数据后返回确认信息。4 u3 n' M4 g6 G, p. k
数据包格式:6 d3 b& s' W( j: R
$ t% |+ l$ f4 _7 o; x) Q+ `; `( F
1 E# R1 g2 \ }' _8 g 表3
+ s7 P) |6 t/ J- Y$ n 响应结果:8 M) q6 D: ~: h# K2 y. \
如果解析包失败或鉴权失败,断开连接。
" U+ S! [+ {5 o: A' o9 \! u* V 解析并鉴权成功,之后数据交互使用skey加密。+ \' y B$ o/ a7 k* x+ ^* G0 |
" O* s* o# Y8 f
' Y8 f5 |. x# T' ~9 X# a9 @/ Q
表44 z/ ]" ^5 g0 N( U) X
1.3 更新秘钥数据包6 y" S" c$ K7 C1 u
用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。
' G0 ^/ w; r0 `$ d! c+ c A$ R p: C 数据包格式:3 s" J" m5 U4 V) g. @
& v4 N7 i6 m( [0 y2 j
. D- S8 y7 _, Q2 A" R7 ?
表5
+ U0 v; O" c6 n 响应结果:
: T- \, m$ W# `" k0 f& U% W& H2 `7 W9 O 如果解析包失败或鉴权失败,断开连接。
4 s M+ i5 o* x4 n. O8 { 解析成功,响应的数据包格式有两种:' V" \8 T; V6 Q3 \; p7 U5 H
: z+ C; s8 J, B5 c' _4 |6 C3 @
( j0 i: ?& h1 i& K' T) y3 l 表6- ]* x/ L( H! r2 c0 f
1.4 更新秘钥确认包
% j% R7 ?; M/ r, W8 K. [ 用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的skey将彻底无法使用,之后与服务器通讯将使用新的skey。, z/ G* \3 a: n, L# g+ Y6 d
数据包格式:% ?$ r3 W2 w2 N2 G) ]4 o) J
f0 J7 }) r! J, H$ l
: A; l4 L8 r6 N 表7
9 Q5 R7 d; l$ B1 B* e: q; l 响应结果:
0 H- ~& K$ c5 M+ P& i# Z 如果解析包失败或鉴权失败,断开连接。
/ w0 b# W5 U: r( ^- v3 Q 解析成功响应报文,之后的请求将使用新的skey。 o2 Y; y- v( ]2 }: {0 ]
2 e1 W3 x$ P$ h2 A+ L3 s
4 F g. u. g8 p% P 表8
! a+ z* z! M0 W5 T 1.5 握手包$ A- v8 B# m9 b$ F9 }
已激活的设备在与服务器建立连接后,先发送该包鉴权。
! @3 ~% g0 E' }& {$ a ^. X 数据包格式:4 H& ?5 _0 O% E# V$ y
2 @/ S- y: D* x! a& o
: W; F$ w9 _) B9 s
表9% K2 V$ d# J: A$ ?% Y
响应结果:, v/ ^, C6 B5 D) `& h$ H' z- ]
如果解析包失败或鉴权失败,断开连接。+ w% _: H) Q/ Q6 f# t
解析成功响应报文。如果响应结果skey过期,发送1.3、1.4的包
2 o5 f2 V; }! X) l
; o( M" h; `# `/ P. a% s
1 p' v" S# L* p9 `$ p) \; N 表10
7 b' ^1 Y: h0 N 2、人脸识别业务数据包
* l: H( `, e% T2 |, W j 2.1 人脸注册数据包0 e0 Y% |! V# Q
人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。
( G V/ w7 ^3 u4 g) A: F, [9 ? 数据包格式:1 ?1 J$ ?& T/ j B2 Z; X
* l- ], M+ T$ P p7 D( _% G
) R) s) ~0 c* G; |0 Z 表114 H' u3 H5 g7 `. O: e1 _2 V; x
响应数据:2 u. P. w) C. w1 r
如果解析包失败或鉴权失败,断开连接。: ]3 a$ P3 f9 B% R
解析成功,开始发送不同类型的人脸图片。
9 u. j7 i3 x2 P/ v$ p! n& g) g. q$ p) K, A1 J7 T5 Q
( s+ F$ v2 N+ W3 S$ V4 o- G0 k' R
表12) v' r; p3 A. a( x
②脸部信息注册包
7 z. F9 O6 b0 S* k. ~, U* K& c 人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。' s' q. g# c5 B I
- Z1 w( _: Y. a/ W& F
% E5 K5 K5 g- G% \8 {8 ] 表13" H# B4 a( S5 ~
响应数据:
0 |! R e6 G9 c
+ Y0 W9 [5 [* X3 E6 {
$ `2 x3 X4 J2 s2 p2 M" ^$ J: | 表14
7 {! p: I8 [0 x, {% E ③结束注册数据包- t$ G& \7 X8 l3 \
注册完成发送结束注册包。
# R2 ^9 F; U& ]( O# i7 |" i
3 m$ y! W* U8 i2 z* n5 i
$ }2 x% @$ e" p' r 表15
6 X1 G6 C/ n V& I. u- n 响应数据:) r- @0 Q" c+ a* h* S
6 @ r5 _, A( y$ R
1 H1 W/ g4 Y, B$ G 表167 g- x7 x$ p5 o8 a# ?4 k
2.2 人脸删除
9 O# i8 {% ]6 z8 O" x# }' h 用于删除人脸信息。
/ l. j% g/ P; V- [ 数据包格式:
& Q( ^. S5 x. J5 ?% e# M& D; z
% X! E7 H7 j+ [* U' i
3 f [8 r6 E7 i c* H
表17$ k: S5 M( N; M7 k4 `3 M
加密字段格式:
; I! E) I7 q7 j0 u @7 ^: Q4 @& d% ^, \" S6 ~* o7 I
6 D9 X" J# b5 O q3 T; d
表18
+ e. f9 O: Q2 m# z* l 响应数据:
2 v! G) l* V Q# `" w3 o& r7 W2 S# G 如果解析包失败或鉴权失败,断开连接。
1 Q; K! l( J8 C 解析成功。. n/ d# L* A/ s( c7 J& r+ M
& z# u. T6 i0 }
; x. u2 n/ T' `
表19& K& j0 T ~1 e" x6 X
2.3 人脸识别
! B! u+ N; m- V 用于已知一张脸,在人脸库中找到最相似的脸,user_top_num表示返回相似度最高的前多少个人脸。 # Y( P8 G/ U: X# d
数据包格式:7 e; q/ E" }9 f6 i) g' L
I. Z5 W# G4 a, c/ ]9 z
2 s3 o* \8 D$ W. N4 V1 e 表20
" ^5 W. L5 x8 S 加密字段格式:
' |) Z& c# [" V# u- n
% c( X! j7 D0 m3 s9 F
) B) M6 m( ]! T' B/ J: k3 ?" S
表21' I5 }6 Z3 C0 o! o4 p
响应数据:# N- b( \7 Q! ~9 L6 ^
如果解析包失败或鉴权失败,断开连接。; R2 J8 C- ?4 W- i# B8 F# F: V
解析成功,识别包格式:
# j, t F; M+ L. \2 @0 {5 `$ B4 L7 E7 E/ A5 n5 V" L
2 k5 W( H& }; T$ I j$ p
表22
9 O5 c7 b0 _2 w) @, w8 E 单次循环体格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。7 A9 g' ^% M' j' R6 R$ j2 ]
8 y! u( u% U% r
5 i3 g1 E* z( {8 \6 w& t8 m 表23* O2 S( Z4 g% w4 H/ I/ R& g1 Y
2.4 人脸认证
$ y& p. ^2 {$ j/ @$ W 用于比较人脸与指定用户id之间的相似程度。7 U4 e% E; p' o
数据包格式:! ~- W& j' P3 m, O* q$ V
( p6 S1 U" x, Q0 R9 t' |+ J4 E7 }1 J; D+ E
5 e$ O4 h+ p' ~5 |+ A6 h- H 表24# f1 ?& g% |8 O) d; R
加密字段格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
# |& S0 d4 G) D- h9 j6 w+ ]+ |
% ~# o# C: E- Z 表258 R( _" X2 N: U, C$ l- q
响应数据:
; Y* c" V6 Z7 E) r y 如果解析包失败或鉴权失败,断开连接。7 p) k8 v+ ` O) {/ Q
解析成功,返回数据包格式:
, A/ }$ f4 A6 P" B; C! o" U2 x6 o
2 P8 H) K. S' {9 p( z 表261 u9 o( a) A7 [( e6 N
9 W5 }& r; M1 E
2 \& h0 B0 D3 g$ }7 h7 W
$ L" [8 B! i4 ^8 P3 o7 y/ a0 ]4 m) T& A2 z) Y1 j
" [/ j7 T* u5 v9 e0 K6 ]9 l
文件下载请点击:
【5】加解密及数据协议.pdf
(688.68 KB, 下载次数: 0)
# c( j7 H! @3 O8 Y e( j& N! ]8 k+ x7 }+ v" S
+ r6 ]" O& R; R6 q8 C" V' p
: U) k8 J0 Q0 b" ^3 e
2 U+ d6 Z: U* t+ W3 O8 c
% b- `5 u, h. h0 J* V |
|