|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
CC3200AI实验教程 ——疯壳·开发板系列 加解密及数据协议 i0 H2 |% r$ }$ L- U7 H ]: w
0 W8 D- |9 }3 E# g1 E
6 K6 J. ^$ p5 x* s% b/ R; O
6 h. n: b, k9 I" E9 E2 ^ 在《AI人脸系统架构》一节中,我们提到AI设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上《AI设备通信协议》。
8 L1 |& L5 @# y9 L' b5 L+ i/ ]$ a 使用IAR打开AI_OCR工程,在工程中找到TEA.c,并打开其关联的头文件GeekTEA.h,可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。' O u9 Z0 ]$ y" j
9 U+ l2 g2 d: b3 N8 p, @
) r' |! {" o) c4 v1 A1 Y* O 图1.0.1 TEA加解密相关函数
3 l4 h r: f0 g. {$ [ 图19 z: V$ L3 J3 N
由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。( o; p9 |8 l9 R9 l
8 a6 }. j n X( J- v
, n* h* G4 f: N. K5 P3 k# T 图1.0.2 getEncryptSize()函数
; B( j% ~, m/ F3 C9 z 图20 t5 o: A. J! M" |1 R! n
接下来就是对加密数据进行拼装以及对数据进行加密,如图1.0.3所示为批量加密函数。$ F. A2 n* ^8 I N- k0 x
z$ u0 x+ w. F! k/ P
; ~9 v2 N% m$ E- j- q 图1.0.3 加密函数
$ `1 z: |. V; E 图3& C# R1 W( Z+ D# \8 R+ ]
形参buf为存储加密后的数据缓冲区、size为getEncryptSize获取到大小、key为加密的秘钥即程序中的globle_Auth_key或者Skey、IS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。7 ]3 R4 \: C1 q! Y( Q9 U
大端与小端的区别在于数据的存储在内存的高低位不同。6 t6 O6 O' J+ X# y1 W6 p H
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
3 M& y3 C- S; @ 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。( p b- ^' A. S
解密部分和加密部分相似,是一个逆运算。如图1.0.4为decryptBatch()即解密函数。 u. X1 Q3 r+ s4 H
3 t- ]& V- h& G( \$ q7 S
+ c0 f7 C; f9 g8 E% Z' V 图1.0.4 decryptBatch函数8 j3 t" [7 ?) y( Y$ e2 d. I& c
图4
: w: x: q1 ?# e6 P% \9 U! _& k) F$ K0 Z. |- G4 U! b7 O6 T7 F
4 t4 T; }. n) j5 Y2 N: z
& x& a8 ?, s0 W& n1 B' C 附:AI设备通信协议
3 [6 Z" J% [$ ]% t 一、数据包种类, @8 p3 [) n, q! u
响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中0xff固定表示秘钥过期,需要更新秘钥,其他以各自描述为准。5 S! X. Y k& C. q
请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。
& L( d, M, u H) @" ~ 人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。
# P T% A t+ U 1、通用数据包' T0 W) @3 b8 Q) K4 \
1.1 激活数据包
& ^2 k7 S% H3 n, L8 L1 L B' T 设备第一次跟服务器建立连接,建立连接后发送该数据包。! ^" _! r: h5 x& h* T
数据包格式:5 h* m' Z. c8 Q% E, Z& F
# w2 Q! n( w% {! G( B. O9 i6 I
: K# A4 n+ U0 s ^6 r7 e/ r
表1
8 [6 t3 m2 |( ^& |" b0 s' _ 响应结果:
7 s, \. g" c' } 如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。
) H) {- j E$ j! ]5 J' _ 解析并鉴权成功后,响应的数据包格式如下:
- V* ^; C& S% G4 e6 z' W2 P
7 D! L. D% U% k% i) p, g6 \
! N; h) J- Z0 C6 P6 F$ f; L% b9 ^ 表2) ^* {5 @; T, l+ V4 o
1.2 激活确认包
7 b/ S2 A$ R K# J8 H5 j2 q4 N 用于接收到激活数据包响应数据后返回确认信息。
% R* O5 t; u3 k 数据包格式:
- m ?, Z2 H. L1 b- R4 q
w# ~6 v9 I# I. z5 j, ~( [" F
9 {1 i- ^. c* {. T; i9 _
表3
& O v- \- M0 k* u 响应结果:2 [, V7 T6 _6 D% e+ T! }2 _
如果解析包失败或鉴权失败,断开连接。$ K# y" f% F5 _3 K5 h
解析并鉴权成功,之后数据交互使用skey加密。
i$ [. o# f+ ?( i/ a0 M
! B4 z8 F, F2 f
7 m4 m% i/ C7 T. G
表4
' I2 a0 l. ?0 O0 i3 \$ R) W. i 1.3 更新秘钥数据包 \+ ^9 k; I' C
用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。
0 O" z0 F* M5 P8 h5 Q1 O. z 数据包格式:
% A! ?( a- M1 \: n m+ ?- c3 j
3 l' A8 S! K& r5 d
+ L6 q9 p \ C0 o& ~$ r1 _
表58 h, O- |( a5 j0 V3 g1 P N+ m
响应结果:
% H$ C; Z! u3 c" X 如果解析包失败或鉴权失败,断开连接。6 p$ [' f/ D4 ]: j
解析成功,响应的数据包格式有两种:
; s8 ` e: P ]: F; r- N- b H' o* B0 x s* _
+ a* F/ f, z# ?: K" I+ R
表6
, K" H% U% j9 l' j 1.4 更新秘钥确认包
; b/ W' d! D9 a' k 用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的skey将彻底无法使用,之后与服务器通讯将使用新的skey。- T4 l: L- ^* ^$ x+ C$ T& V
数据包格式:
& W5 |' D- Y8 L5 x d( c3 \0 w: u I8 H' {( D, c. q: [) i
; Q% j4 h6 N g
表76 P* Q# `9 C4 W" |0 _
响应结果:
7 i2 l! \* F8 N4 T 如果解析包失败或鉴权失败,断开连接。
6 Y/ c$ i. I3 Z* M 解析成功响应报文,之后的请求将使用新的skey。1 L3 W; u/ Q3 Z+ R( B
+ i( ^, ^3 Y# h+ c4 X
# |; A& T, U' m! R) B% O# F9 K# @ 表8
1 I0 P7 t5 {6 h6 r 1.5 握手包+ R; _4 ~7 k' a, F1 v; q; i
已激活的设备在与服务器建立连接后,先发送该包鉴权。# p8 T2 x: L: e. h" G% x2 b
数据包格式:
* r- k' m, p+ ~( z8 w* L8 [& z- P
2 v" g8 \& Z5 ^: T% n# D$ e
- k1 i O) [4 I6 |& b; W, w
表9
* W; G+ N! j% @$ r9 O1 V 响应结果:
+ D% Y- V) H$ d& D& `, h4 x 如果解析包失败或鉴权失败,断开连接。: G% I$ D* w- `" h9 Y" c
解析成功响应报文。如果响应结果skey过期,发送1.3、1.4的包
6 K/ g- @ c6 q6 e
3 @% f" l7 a! ^6 r
8 J7 n' `1 B0 a7 B/ Y5 v- K# N1 T 表10
5 y- R Y. i& Z8 i6 y3 h) h 2、人脸识别业务数据包
& z% N% P8 F/ d1 e1 V+ ^+ d! m1 q 2.1 人脸注册数据包
p8 q3 V. i) D 人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。3 s# f5 X. g h
数据包格式:, U* w3 m) p2 m) `
, c) {( Y! E; u& \2 w ~
9 s, M6 x0 b3 \( m( r0 S
表11( B* F/ J2 B8 r. z; y, F2 [
响应数据:: p) v5 h; W* r3 |2 o6 t
如果解析包失败或鉴权失败,断开连接。
$ E' N; y& f4 `( ^' ]/ r9 t+ L 解析成功,开始发送不同类型的人脸图片。6 d! Z& u- o; O
3 u. E& j3 T: I* n/ p7 ]$ s
' y1 [2 M0 B- b: }, _
表129 p: q: C+ x9 X4 F
②脸部信息注册包0 z& d7 O! S* k0 Y) ~1 c% R
人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
g' p/ p5 v; z3 p( S
l! }: s* `4 [" y9 Q0 u
- w6 Z) Z! ^% T 表13- K" p2 f$ f9 ?! M- D/ n/ S& l+ P
响应数据:
) t+ d4 |% n6 I( j+ |% m% D' V! S; i& W; D8 M
% U6 S9 q l$ M
表147 Y" E4 v3 X: y# ]$ q7 J0 M
③结束注册数据包
% ]& _9 g6 d4 y* p1 N' \ 注册完成发送结束注册包。
2 c1 s3 @6 A0 }8 e) _
9 S# Y6 O# q. d
# q6 O% \# D" ?7 R3 T6 L 表15
9 F5 u; h* L5 d" a6 ?; W2 c1 A8 } 响应数据:1 N' G4 i# [' h2 M1 Z6 N' |) G
) V" ?; [+ j+ q9 \" a2 d9 Z) K6 t
7 I' N- A3 o% g
表167 K% ~7 e2 b* i; d
2.2 人脸删除, o/ T+ t+ x& ?) ?3 K, r
用于删除人脸信息。, Y) u' ^+ v" S
数据包格式:
4 `" b" o' w6 a: Y8 x2 P. ~! `, x) g& K
8 n; K7 l% \$ g* k# D
表17$ x% T- X( Z$ q) {5 W1 T
加密字段格式:" `7 @% h/ k {) \7 d9 ]
& {' V, B2 N" T# H
5 t3 m( U% F3 s( R; E2 c& k8 q) |, D 表18
7 p& U, s, \' _9 ~1 \ 响应数据:
* X. x" Q6 _$ k) J) f" w 如果解析包失败或鉴权失败,断开连接。
5 O! Q: B3 k9 l0 j4 o; y 解析成功。# K. m5 `& H" s4 ?1 S
# d, O( J0 x2 H3 e
0 f0 f3 O% C- Z9 A/ J/ ~! A 表19
0 _( R: ~/ o3 u6 e 2.3 人脸识别
9 p1 t0 h4 f' u; X J 用于已知一张脸,在人脸库中找到最相似的脸,user_top_num表示返回相似度最高的前多少个人脸。
/ B. |& x5 w I% W& P) Y% T/ z 数据包格式:1 C2 s2 N9 ]5 x) X( M+ h& ^9 {
: \6 u1 G) F5 P, s& F9 ]
! J, Z9 e" `1 U# [
表204 t8 B* J: ]5 ]+ Z; s% v
加密字段格式:
0 E+ K( P$ N1 V O3 P; m* Z) @& c9 ?# a* h
; i' L: T0 r; J0 g3 |& d- E# b
表21
! F8 m* N! R: g 响应数据:1 h; i+ H+ M6 w" j
如果解析包失败或鉴权失败,断开连接。$ e& N9 T, p) K+ e. H5 ]
解析成功,识别包格式:4 @5 d' O3 |: K1 \
: n: x6 a$ H0 E
0 Z ~/ l4 T3 _
表22
. x# q* F7 o" t1 r9 |* \5 \3 i 单次循环体格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。! S# |; k W( Z# p- n# v+ u: C
/ S* {- n2 C! H) S, z1 j* N
0 J9 v! [& r( x 表237 |; O' b% X! i- _8 u6 t# R- c+ M4 Q
2.4 人脸认证: \+ s+ ^7 ~# N' Q
用于比较人脸与指定用户id之间的相似程度。1 l. ~4 T6 [# r9 H3 w
数据包格式:
$ v% D. ^* O* Y! L. E i$ e9 s* o) g0 K8 U
" l3 ~7 G# ~% _- @ m/ c 表24
7 G2 ]- j: Q! C: @9 Z9 E 加密字段格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。( V2 M3 i$ L- V `) I9 B' S
' e2 L: F" [( k I2 S" Y0 v3 N
- b" W( w# d3 R) I
表25
7 h/ F8 c4 K3 O! q% D* Q6 m 响应数据:! j4 X; U' \) l% l5 t8 x
如果解析包失败或鉴权失败,断开连接。) P2 K$ N* x$ A
解析成功,返回数据包格式:
, O+ p# u2 y2 ]) ?: \4 f
! |+ T6 A! }9 r7 m5 ]- c# Q; ^
% K' F# w2 r: U4 g5 O; v 表26 j& a% L+ T! O8 ~
. U- x$ X1 o# r/ Y
/ D/ I) U) H+ D& @6 Q* s
Z* R0 I5 \9 w# v' I2 r( \( a3 Y( A) A
+ c: x: M9 `- S8 g2 p. M 文件下载请点击:
【5】加解密及数据协议.pdf
(688.68 KB, 下载次数: 0)
9 }" } I C6 b! ]5 p _4 E' y$ y6 { y3 Y$ B
" b6 N! K* C4 u; G; i& A; Z3 K, O7 p( K. I
, H! P+ X/ l( Z1 @7 ^' _' k0 S+ }7 \8 h; V
|
|