|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
CC3200AI实验教程 ——疯壳·开发板系列 加解密及数据协议
. `) n/ p8 M5 `# X/ \1 L" p) a
: g/ Q! Q( c2 M+ W
: p1 ? r4 e& Z# g* V! ?5 W- _4 K7 _1 H: I
在《AI人脸系统架构》一节中,我们提到AI设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上《AI设备通信协议》。% W9 j& Q5 t8 \) w0 p* {9 v& e
使用IAR打开AI_OCR工程,在工程中找到TEA.c,并打开其关联的头文件GeekTEA.h,可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。1 E+ b" [# M7 s0 g1 a1 I
, |& \9 e, I7 Z. }0 i0 Q7 f& {
$ Q3 {, h3 |/ s3 S1 E6 y4 c0 P
图1.0.1 TEA加解密相关函数1 n" s# `1 M% b& y
图1: x9 D# Y# z+ e- s+ W" v6 X) H
由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。/ N$ d6 [2 P+ ]% a5 Q
2 R& t1 p0 `7 Y6 U W6 \9 v+ ]
# i! Q) V! ]9 ] 图1.0.2 getEncryptSize()函数
s; H( y0 o) [$ k" _2 y/ f9 ] 图2, M, N; i, T- N2 a
接下来就是对加密数据进行拼装以及对数据进行加密,如图1.0.3所示为批量加密函数。
- ]0 |! q9 j1 h/ {7 @- A l) g& X% U& T( c# `* V/ }' n( Q* J
7 {1 e N1 ?9 b
图1.0.3 加密函数 ) L9 M# r2 p$ h$ O$ b* `$ E
图3, t7 V- {& \) P& B
形参buf为存储加密后的数据缓冲区、size为getEncryptSize获取到大小、key为加密的秘钥即程序中的globle_Auth_key或者Skey、IS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。0 E9 s3 B: k1 U! M8 w
大端与小端的区别在于数据的存储在内存的高低位不同。
. A! @4 s* U$ L8 E5 | 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。0 K/ y( J9 s' }" E2 k- X
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。, L% o3 f% [! S+ N
解密部分和加密部分相似,是一个逆运算。如图1.0.4为decryptBatch()即解密函数。
& Q9 t2 D3 p4 S2 T5 M/ Z1 ]5 s
- H' ?+ D5 ]. @/ ?& C* u
# n: \0 }7 j/ d! O( S7 x: c 图1.0.4 decryptBatch函数
( j& n" o8 s! V5 |, ~ 图4. W+ T& R( B3 R* N
3 a+ E7 I6 t) Z! B, i( p8 [0 q* e; m) o+ v U
p8 I: e3 A$ q3 R! m- R 附:AI设备通信协议9 S5 u2 s, e& m# T
一、数据包种类
+ e7 [! W$ |+ C: W7 H) X, ~. w* a 响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中0xff固定表示秘钥过期,需要更新秘钥,其他以各自描述为准。" \' H- P" q* H4 p$ `& B
请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。( A, |8 P) {3 j" c
人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。1 y* }+ K; v& G1 P! }0 U4 {+ f
1、通用数据包3 m! \; G6 }- J# d+ `1 M) E' c
1.1 激活数据包5 c: T( @( m( V; `
设备第一次跟服务器建立连接,建立连接后发送该数据包。
' N& u+ r: O( l: ?( |1 O! Q 数据包格式:4 \4 _ L+ r# t6 Q( ?" u
/ f( C% M6 J! G
' ^7 @5 R9 N/ }
表1 @2 }' T f( H0 `2 P. f
响应结果:) O- C' I' ]1 I E7 Q. o0 d% B
如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。& @5 l- L4 W) s' P
解析并鉴权成功后,响应的数据包格式如下:
, Q# F3 h0 G4 Q6 A( a$ ~& `( J0 T' s
: o4 ^7 E- N7 i* ^, H. J8 s
表2
t2 c* \: ~* I 1.2 激活确认包
/ f/ b4 f: @" u! N 用于接收到激活数据包响应数据后返回确认信息。+ h( B" ?" D: L% P: I# E1 c
数据包格式:( F9 m! n; D. _- t
7 w% ^* T0 q k$ r" ~
" c) P: }$ l5 `% i6 W9 f
表3' {" ]- E+ Y# Y3 D" S# h
响应结果:
0 T7 k4 C8 \; |" N 如果解析包失败或鉴权失败,断开连接。# S' b& x. ^/ l) [5 ]
解析并鉴权成功,之后数据交互使用skey加密。
1 t1 ]. c. @5 }: A9 z0 h: d+ V9 T# X0 _5 s3 {$ m# r, s
4 R, z$ {9 |5 x- O 表43 ^% H) O( \# A* c3 S$ L
1.3 更新秘钥数据包+ W# w3 g' j2 N1 b5 E8 e# s* ^" n
用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。* O8 z6 {1 d7 |/ c
数据包格式:9 U- t% k9 `% o4 T
5 s$ J' l2 M6 V7 \- y; q1 h
% f, N* l6 u1 _0 G, T# N6 a5 Y 表5
+ C. H. ?. }, F0 R" Q2 U- N 响应结果:1 |; g" d. Y9 S0 M2 o
如果解析包失败或鉴权失败,断开连接。, w" K9 V, D' S
解析成功,响应的数据包格式有两种:0 {3 F; F& y- d! S' ]& o
# s. ]- E5 M6 g# _
$ R5 L5 Y" L3 L7 Z 表6; C. w8 F+ l n" }
1.4 更新秘钥确认包( P a- I1 E$ M
用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的skey将彻底无法使用,之后与服务器通讯将使用新的skey。
1 K+ ?: j, s8 i0 t 数据包格式:
. L- n- u5 H' w9 }# L+ ^' J5 C% T' H7 N6 u% R5 {/ N
( U) }3 q, f' r) u/ e 表76 S/ p* L( \3 L' e1 F' z
响应结果:8 a2 ?6 V* e% \$ s- F ?8 }
如果解析包失败或鉴权失败,断开连接。
3 N L* v& g& Y5 a2 P 解析成功响应报文,之后的请求将使用新的skey。
$ \/ J, ^6 u! J x7 |/ A/ U+ o4 y, n7 Y+ ~- F
: Z3 s0 s2 R) a4 }7 @# ]! `+ \: h 表8& o3 Y+ T! @- ~& |/ ~0 \
1.5 握手包
1 C' _& L7 ^2 t7 v 已激活的设备在与服务器建立连接后,先发送该包鉴权。8 ?. D7 n Z9 @. L* |% W9 z
数据包格式:
1 `( O) X, H* ^1 x9 g: X- f
. P. m5 v3 F: I4 E
: U" f0 o7 o- l8 i: }% R
表94 P: {# x/ C9 r" l4 j# `
响应结果:. C* k0 K0 e* y6 V* k ]
如果解析包失败或鉴权失败,断开连接。- U; R2 E" H! S, F! N1 e: ^4 X
解析成功响应报文。如果响应结果skey过期,发送1.3、1.4的包
4 O! E* K9 @$ n
! c: H4 [" n; }' s" j, @
3 E3 J( K' x; \ 表10
/ [! i- l0 p/ s* O 2、人脸识别业务数据包- [' o: s% r7 ]& G0 V3 ^; z: d
2.1 人脸注册数据包
* M5 J5 P2 S; ~6 w* X) n: X& @ 人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。
- C3 u7 O# X6 R( f T 数据包格式:
9 c3 p7 \5 M" Z" Q7 p$ x3 c0 H$ S. g! X5 k1 x
' ?$ ] w& A2 `- I
表11
! N8 Y7 J5 L* O, V* B1 E9 H 响应数据:# v/ S( p7 \1 c% w0 |1 f- e4 v: k
如果解析包失败或鉴权失败,断开连接。& m M- D# N0 U' | P( Y8 H* w
解析成功,开始发送不同类型的人脸图片。7 [( q3 F* P: J( H. F! ?+ H* G% t
' @1 q" }; e% }! _
' ~. n6 ~; ?8 z
表120 Y4 Q4 N1 [3 Y# h
②脸部信息注册包! o3 p0 G, ^7 L3 V: }
人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
. Y$ T5 Y& k7 b) l8 k1 E7 {
/ Z2 R2 G4 D' P& ~
5 z$ T2 T( }5 b/ t
表13
, _ n. C0 r3 E- y9 H3 f 响应数据:
7 q0 L4 z0 X$ k: r6 U# K6 k
# K( p# C! U2 g5 s5 ` O
P. ^! A$ [# W8 O5 a- m
表14
1 B% l5 p. ^ m7 ?8 |$ V ③结束注册数据包6 Y8 _. D. ~( l) o1 v% l% {* C7 N
注册完成发送结束注册包。2 R, y: L' m% b& P3 ?3 A0 f
7 m/ q# c- w2 f( F4 [. k" _* n$ b! g
! P) l7 a' g+ K& ]. ^! A 表15
, ~, q0 k% a9 ]- B, f 响应数据:
/ _6 c" g5 T/ ]' C0 D2 f# f/ ?/ l
/ J7 f& x H3 v" _; D
) k4 b) r* T4 u* ]* \3 H
表16$ j* \7 O. U$ A9 }) m
2.2 人脸删除
+ A8 r1 X1 b$ Z7 C# Y2 l1 N 用于删除人脸信息。) t. s' K+ c$ e8 }
数据包格式:8 ?7 |0 B" I, w! k
8 G$ x: E2 \ e4 r/ K9 H
# e, G4 u( P% d' _ 表174 X9 @+ ]" p* @/ x# ^( i' L
加密字段格式: G* D2 ^( H3 ~" X6 N
: o0 b: S7 b- O c i
2 }8 F3 ?3 I& t
表18
2 I* S/ T/ A3 U/ d1 W$ U 响应数据:/ M- L" o/ J4 D9 R: M' j
如果解析包失败或鉴权失败,断开连接。& x' M8 q4 I0 z% g2 {& {
解析成功。
& C$ b- J# Y% `) X0 J- z& S) W! L0 m- r7 _
- S3 k6 t% r5 ~- H2 r5 i9 H
表19
; h' P/ t2 q$ f& Z! N1 W 2.3 人脸识别* W6 s& y8 c9 K4 w
用于已知一张脸,在人脸库中找到最相似的脸,user_top_num表示返回相似度最高的前多少个人脸。 7 @% E0 S5 R# S! ~2 A& n
数据包格式:3 R0 b, N7 V8 a& v+ {
2 A: B+ q) l+ q0 l
, x+ ~( D9 F4 B' m* ~1 Y) p 表20 \9 ]5 M5 ~; n! Q' c) |9 s
加密字段格式: T1 `3 G9 g# o7 b( a+ @
- r1 \ j- I& M7 d! L
# Z. w( `" v7 S; x' [' o# J8 q/ i. v- s
表21
5 x' g$ ?( f- n1 L+ O( @+ p6 S' U 响应数据:4 C7 u: `$ Y, S" j0 o
如果解析包失败或鉴权失败,断开连接。. w8 X/ v: M0 C; t1 h2 U
解析成功,识别包格式:8 w6 J. H5 h* ~
4 Q7 Z' a \0 k3 ~# P" t* i$ z
* w2 a$ F ^6 z. b* t( ^
表22" t- m4 Y2 r* w" ~, S' ~
单次循环体格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
9 Z* M1 R" w. }, _! L+ y" j
/ x4 w, |+ h0 n' K' t
; {# I x, _4 q J1 R0 g 表23
2 ?3 ?- g# \: n 2.4 人脸认证
, S- d8 E' h& a2 O 用于比较人脸与指定用户id之间的相似程度。
, T! p s: V$ w" D 数据包格式:
: e/ f' F, a; \1 m q; [; b. Q7 b2 s! q2 T; L5 D- ]
, N# w, G. s6 o
表24
, `3 O/ _( ]. Q/ Y% j0 F# W, w/ d 加密字段格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。( B; s6 K/ ^! R6 y; ]
: J+ {& r& P6 |
6 s: T/ t. K; p( H; }' T* d 表25
/ T4 J$ p! [2 k( Q4 }: s 响应数据:1 b Y! k+ T) o+ R' b9 e" D1 ^
如果解析包失败或鉴权失败,断开连接。7 u& W2 l$ r3 [; v+ Y
解析成功,返回数据包格式:
4 D/ O+ f" |- ^; n4 l% P0 T# t; t9 r2 P
) ~9 R! M; `% C% F- l
表261 i7 m: }) l8 U- e' T/ H I3 R
4 Z6 c p5 S6 c6 y r% ^' i
% e7 E, E+ O& ^$ F8 _+ f* [; p% r7 ]$ l$ z8 m8 I# b
( Y+ y5 i9 T+ k- e; C6 s/ |" A
文件下载请点击:
【5】加解密及数据协议.pdf
(688.68 KB, 下载次数: 0)
6 V2 B. [" x e* ~+ I/ j+ k4 m( {7 f
9 ^) A7 p( [' Z0 O4 N& r z3 B# H
; t. g! T! [; z! _9 K) @+ t3 e" d: }" @5 ^3 S5 Y
- h( }: q2 ^4 E% p9 J0 c |
|