|
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; { |
|