标题: 报文拼接与加解密测试 [打印本页] 作者: 2744557306 时间: 2024-3-31 17:21 标题: 报文拼接与加解密测试 # -*- coding: gb2312 -*- ) A; y# X" s( f; b6 m( V& ~4 A+ A4 Simport socket ( f& x! t- z8 X T* u! y8 K2 a4 f# {from myutil import * ! b$ \8 K( g+ }3 E# Zfrom binascii import unhexlify as unhex & m/ ]% w# ~# I+ e7 X/ i2 l$ mfrom ctypes import * : d+ s, T% ^& C b, ]4 V9 Kdll = cdll.LoadLibrary('mydll.dll')) N% o6 y5 I/ {4 I$ X5 j
print 'begin load mydll..' 9 k/ U+ s |+ C5 T- V# c#key 9 V! h8 }6 P4 k- V2 G' tkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4' 0 [# h2 L; T# a* P M4 _) L#output MAC , j9 B9 S; B) m. D9 A6 L5 \# gmac='\x00'*8 5 n( Y; S8 B( mdata='\x00'*8# ^+ r7 O+ I% l
pkey=c_char_p()1 v4 ~ }' f" B% o1 Q8 ~
pdata=c_char_p(); `6 |9 ~1 p5 @2 j: i( D
pmac=c_char_p() 1 Z- _# i4 o7 f0 c8 {( wpkey.value=key4 }/ V. Y8 W- o6 {" { d' f6 Y
pdata.value=data/ E4 g. s, P+ Q
pmac.value=mac : |. E, L l8 p! Z! _) t#pack1( A- `! p5 k0 Q! ?+ f7 ]" j
class pack:4 o* d8 _% r1 L
pass * b! b8 g7 E1 j0 P$ [, K# |pk=pack()( F/ j4 Q& A/ F& D1 n/ e+ j, \% h
pk.len='00000032'/ ?, D1 J4 S) e& g' w7 Z) d
pk.ID='0001' ) N& p- \( D, B/ x0 c9 spk.slnum='00000004'$ U8 h2 o0 ~! `5 n& i7 K1 i. x5 A
pk.poscode='123456781234'# g) M% I5 H& l" U7 I5 ?0 w5 L' M6 E
pk.rand='1122334455667788'. {7 }' b# _. X8 | _+ f
pk.psam='313233343536' * x/ h. M4 T4 w7 j Rpk.kind='0000' 2 q. R t5 P6 b2 ^* h# Npk.ver='000001' [6 A% ]: C. x& N1 R
pk.time='20140805135601'% Y/ K1 q0 U0 o3 d1 N& z
pk.mac='06cc571e6d96e12d'$ H3 i7 l0 A6 G; W
* P0 t% s7 b( S5 M7 _) z
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time) $ t! ^, ~" o* F0 V3 h B#print_hex(data) 7 r4 J$ H) `$ l$ R) P( epdata.value=data4 b2 h7 S3 o$ o$ [+ [* U
#cacl MAC! c6 C8 j- O: i/ Z- L1 B6 F
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac) % E% x5 A' K# V4 n5 F5 _' Mstro= pmac.value8 G8 t( O7 P: v7 G
strtemp=''1 `) I9 j1 \5 z! a
for c in stro: 4 s' r8 O* P+ u5 J strtemp+="{0:02x}".format(ord(c)); M2 o( X3 g2 v
#print strtemp 5 [+ T: b" a- vpk.mac=strtemp 8 G: }- ~9 ]" R j# P3 A#data to send 7 X* B V% W# c W& qsd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac 5 m* M; H3 d: `5 q5 oprint 'send1 len is 0x%02x' %(len(sd)/2). [# ]2 X! M6 y) n( g
print sd n2 p& k' g4 a5 k- U- R& f#pack2 % f! p, @! b, V+ v0 M+ Vclass pack2:9 K3 a( r1 L. X6 D+ U! ^
pass1 P, K; [. V ?% W3 w
pk2=pack2(): P: m1 B# k0 q- l
pk2.len='0000006E' # B5 H0 O" s% R( Q, i% Z# Zpk2.ID='0012' * K s/ }( k a) ~8 l. `* Rpk2.slnum='00000005'2 j. h. q. s+ ~" X
pk2.fatCode='00' 2 ^4 \0 ?5 U5 y- B1 L: d# e7 ^" c6 Kpk2.cardASN='0000000000000000'& N0 R: k: k& ?/ Q1 U5 |4 p* J
pk2.cardType='00' 0 V4 Z/ _) q) Zpk2.userNO= '0000000000000000' 1 w& d7 A' p% F4 P* p1 n1 L2 r( b% s! ^3 s
pk2.fileName1='00000000000000000000000000000015' ) \) r/ i2 S( Z2 {" }5 ^7 w8 I9 Opk2.dataLen1='00' 6 T, s- k5 H6 ~" _# L- S# a; ~1 `pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF' / e2 [' g. {! g5 L$ Y) N5 gpk2.fileName2='00000000000000000000000000000016' " s8 Q0 B0 p% P1 B4 [/ jpk2.dataLen2='00' 2 D% M$ _$ f! \4 Wpk2.dataArea2='000003E800FFFF16' - ?, W9 Z8 _) kpk2.mac='06cc571e6d96e12d'7 O, s3 h9 U8 l: _! B5 z, }) o
" [; F% u6 C5 H
data2=unhex(pk2.len+pk2.ID+pk2.slnum+pk2.fatCode+pk2.cardASN+pk2.cardType+pk2.userNO+pk2.fileName1+pk2.dataLen1+pk2.dataArea1+pk2.fileName2+pk2.dataLen2+pk2.dataArea2) 1 I6 P# @2 o+ N$ b- Z$ M, T3 y6 t8 J; s- }8 j2 Z' v
pdata.value=data2 2 c6 k. ^: i. ]: u6 H#cacl MAC; `. v$ T+ _& z! l7 Q0 M
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)! h2 ?, F- {9 U9 p7 N' U* n
stro= pmac.value3 g( i8 }3 l O: O/ o3 B$ D. s1 r5 t
strtemp='' ( A5 h9 P4 E1 R9 X. u, f+ wfor c in stro: 4 e9 @" f' F& i* M! B strtemp+="{0:02x}".format(ord(c))% @* n( P4 B/ {9 Y8 h
#print strtemp * T' K# `6 y9 P0 S8 O; x7 O5 ppk2.mac=strtemp , P/ [6 K6 D* i1 t- y( @2 B! e#data to send 3 x2 i7 i+ ]( A/ o* ^sd2=pk2.len+pk2.ID+pk2.slnum+pk2.fatCode+pk2.cardASN+pk2.cardType+pk2.userNO+pk2.fileName1+pk2.dataLen1+pk2.dataArea1+pk2.fileName2+pk2.dataLen2+pk2.dataArea2+pk2.mac- v. \8 f% }, K' z4 k* l1 k6 N
. k K6 |- _' n( x' v! T5 o
print 'send2 len is 0x%02x' %(len(sd2)/2)1 C3 f1 A0 W' F8 l3 p7 ~
print sd2 - b3 B% h, I( H @! U" ?. n: [9 Q; m
/ A5 C: F% r. u) m$ b
#PORT="192.168.60.37" : n7 Q K2 U9 } |( w#PORT="localhost" % Y4 v* x* M: UHOST, PORT = "192.168.51.28", 5800+ a% O M) @* N* G/ Q% r0 E
# Create a socket (SOCK_STREAM means a TCP socket) - {( F2 H# T. j( |: |" g& gsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) / Q8 ?* l" a$ ?0 H) G6 e. Q/ ]try: 7 J/ Y7 C t5 m- C # Connect to server and send data; t7 m9 u1 O4 h7 }
sock.connect((HOST, int(PORT))( i0 a+ `: }' t# G: q
#data= "123456789"$ n& G. |5 W% _3 i/ M
#s = struct.pack('bbb',1,2,3)# {$ }6 O2 K, v1 J1 X' U4 H/ _9 d! ~- b
sock.send(sd.decode('hex'))' p% |) L" n6 z( [, G% z; c( S: v
print "Sent1 OK:" ; @$ ?9 A u8 {3 z0 J print sd7 ^4 S7 ~) w8 Y/ g8 H! i- R! }
# Receive data from the server and shut down% Q, t3 h0 t- ^
received = sock.recv(1024) * K. i2 i& t' C" b* F print "Received:"* J- A. `( U9 }9 K9 p
print_hex(received) : \0 F3 I6 h: x print 'received len is 0x%02x' %(len(received)) - ^6 d2 b: z4 ^ print 'received data analysis...' X6 v D0 O. V" S: y! c% s9 f. V
re1=received[0:4]% S$ l2 w! V" d
print_hex(re1)7 P1 W/ W4 k3 t* d! L; M9 i
re1=received[4:6] ' R# @( N, F4 E. [' @( y3 j4 u7 W print_hex(re1) , q, |6 V w8 b5 p- M4 N2 v re1=received[6:10]" ` O" n+ |' `4 u
print_hex(re1)0 b5 X1 I6 m9 A! B! c/ Z
re1=received[10:16] 4 s% `9 L$ C" U: m" E8 E print_hex(re1) ; Z) O4 r& H$ K9 H7 W% e* J! L2 d; s3 e: u7 W- O/ l
#pack2 send 4 Y/ N% v$ a% A/ m0 h) X5 u8 M sock.send(sd2.decode('hex')). a8 E( P9 F; w- _2 {
print "Sent2 OK:" ( C" _ r) s( T1 ?- q& e6 g- Y print sd23 a- N7 I" v( e3 `/ C. d. U1 K
# Receive data from the server and shut down : c+ R& r e* }/ f received1 = sock.recv(1024), N) K4 V' d, N+ g( K
print "Received1:" , N& v* Y6 k6 n% ~9 o. M5 | print_hex(received1) ; ?7 Z3 I/ u& D1 i7 M print 'received1 len is 0x%02x' %(len(received1))1 y- ]$ }& q2 s2 b$ j, c4 y
5 _ l* p: g% Q; {- ffinally:& u# M) Z! U& V8 w) m
sock.close()3 y2 c4 ]# f' t3 |: Y5 N
+ m* Q9 v. s+ x8 o+ `! F. g
s=raw_input('press any key to continue...')9 U* v. Z* _; J6 A5 n4 p( X0 a
+ @$ [9 A1 G, A, k6 V* J1 }0 o