数学建模社区-数学中国

标题: 报文拼接与加解密测试 [打印本页]

作者: 2744557306    时间: 2024-3-31 17:21
标题: 报文拼接与加解密测试
# -*- coding: gb2312 -*-" j. h* u! z* m) T" F" d. n  L
import socket
# k, i% c4 h7 P  O8 v% m: T+ ffrom myutil import *
: z0 P4 _3 k& Tfrom binascii import unhexlify as unhex# F, b! a8 Z0 e: v. [5 `+ ^/ d0 [
from ctypes import *  u, d" K7 @6 u
dll = cdll.LoadLibrary('mydll.dll')' v7 m$ R- d& A: ^0 ~: J2 M8 ?
print 'begin load mydll..'
4 ^1 }9 H0 n3 Y4 n4 B#key
2 p2 ^" q6 S4 O  V* Xkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'5 o3 R, a- K' _0 J0 j
#output MAC
! Q" X; Y# {2 Gmac='\x00'*81 i# M1 ?" h: n: z; `/ K
data='\x00'*8  R& D: j, b% F
pkey=c_char_p()
. ~' F$ Z8 b* |7 Y  zpdata=c_char_p()
( s. r* l$ X0 u- U1 P3 [$ Hpmac=c_char_p()3 a" b- T! r3 l0 Q- C/ R4 |
pkey.value=key9 C1 G8 `# T' S4 X
pdata.value=data
8 s' ~0 ~2 o* y: h/ C+ a/ spmac.value=mac7 t& \0 k1 @; k4 n
#pack1% n& v7 B$ I' ^( \4 |7 o/ i7 @8 w5 E: z- j. T
class pack:
$ {% U( H1 A& D% L5 W( {9 L   pass
0 {% D& f  R1 ypk=pack()
$ N8 r( z6 {7 T! S& z) dpk.len='00000032'2 {- V( v" V& [
pk.ID='0001'8 J* j, q7 m1 }7 j( o
pk.slnum='00000004'
6 t! }) ~* S8 w+ S- t0 Hpk.poscode='123456781234'
1 ?! w8 \5 d6 c" kpk.rand='1122334455667788'* _1 @# J% H0 W: u" B9 [+ o
pk.psam='313233343536'
, w# s5 ]  Y! v0 Fpk.kind='0000', D6 K5 R9 D4 Q: ?5 D
pk.ver='000001'( T8 N3 z0 S9 P# J$ i% k+ d
pk.time='20140805135601'( Y- T; @8 \$ {& u/ C
pk.mac='06cc571e6d96e12d'" h9 h& Q: D. z

3 [! J" V7 U; k& N! s6 Z: bdata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
6 M$ J! \2 R* K! [& j( D#print_hex(data)- V. ^4 }7 o+ k: L1 Z
pdata.value=data
( [- e  o; ]1 |. o5 u, R% L. o#cacl MAC: ~2 S: }6 c+ u) k' T; N+ }9 f
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
' f- o8 @' ^; k( z* u+ c* r8 ]stro= pmac.value
9 y9 b0 k8 x8 A7 p" o0 Pstrtemp=''+ }( c6 i) u9 v' M; m. n4 V6 J
for c in stro:
* y4 z- C& B- r( y( z1 K" v    strtemp+="{0:02x}".format(ord(c))
9 ~$ C7 U. Y5 P; i2 v#print strtemp: c4 U: u: K% F/ ]
pk.mac=strtemp
2 D; k1 i/ g$ ~& E+ E/ P#data to send4 _' t; A% q2 v; D" X
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac, @2 c9 t5 M  K5 n0 \
print  'send1 len is 0x%02x' %(len(sd)/2)
3 e; F& U9 s% n# A+ c  w" mprint sd
- P# h( \5 n+ X8 r#pack2
, o7 G2 a  [& J+ `* Uclass pack2:( v! t2 g% y: v  u5 n& B8 A) i
   pass
: Y8 Q& R+ q3 Z, n- [pk2=pack2()
. g" }+ x7 U1 G5 b/ |- _9 y- Rpk2.len='0000006E'1 e' Q$ u) X$ o$ E  P) \
pk2.ID='0012'
& H( j' Q2 c9 z' vpk2.slnum='00000005'2 [% _/ v; v: S* E) p0 I& o
pk2.fatCode='00'% m. C3 ^$ }) k' g
pk2.cardASN='0000000000000000'
) P: r9 @  m0 apk2.cardType='00'
6 ]# Q  @/ u4 w2 P$ p# I* P2 Y  Wpk2.userNO= '0000000000000000'* B0 u& U& ^" C" S$ U0 @

! c0 {. A; n) ^! C' Y+ Ipk2.fileName1='00000000000000000000000000000015'( O$ J2 A! Z/ N+ [2 P  I( j+ p
pk2.dataLen1='00'
; f; ?/ v; S9 a9 spk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
6 ~; X; o- _% o* ^; Jpk2.fileName2='00000000000000000000000000000016'
9 X) m$ T- t2 f3 p/ T/ c; Epk2.dataLen2='00'
- L7 a- n( F, `pk2.dataArea2='000003E800FFFF16'
2 u+ H! a  }  v8 N% \& Epk2.mac='06cc571e6d96e12d'1 m) J( G4 C2 q. F- @: X! |* W
+ W  o0 q$ ^# D+ T, r6 C# p5 \; A
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)4 }' x/ d( E: j! o

% G% [6 l1 |* U' S6 p! S5 D6 Ypdata.value=data2
; g" t; L& A# z7 T! Q+ g* r#cacl MAC
- U9 |: K) N* X! i7 M" k0 V9 rdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)$ D, \: ?, J5 o+ g( e- T' r
stro= pmac.value
% p6 z0 ?  r5 \) w- ustrtemp=''
/ J$ Q0 b" {$ p" Q. F2 hfor c in stro:
) Y' q! c% q& U) D, n    strtemp+="{0:02x}".format(ord(c))
: X- U6 f! ^5 Y5 Z#print strtemp
3 k- Z# F0 }" m' n  Z/ ppk2.mac=strtemp
  l; T! {$ b! e2 e8 q6 y8 q#data to send
9 ^( Y5 w; \! E) J9 T5 Ssd2=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
- k) m3 J3 G$ T0 L7 V
5 Y0 O1 H; H, ]7 ]% M7 K8 Xprint  'send2 len is 0x%02x' %(len(sd2)/2)5 O' s' @- R; \2 `  T1 x9 \
print sd2
6 @0 I. y4 w2 F( o: }( v& |5 Q4 Z( X  m7 v6 q: [3 I
, a; G$ A9 n6 V: S0 e6 t
#PORT="192.168.60.37"
/ D- W1 ~' v+ |4 z" {#PORT="localhost"
+ D6 {' J5 n3 Y8 d, e2 WHOST, PORT = "192.168.51.28", 5800
- M; l1 ]4 K5 n& H# |# Create a socket (SOCK_STREAM means a TCP socket), X, k1 s: s/ n) E
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)+ C% j: w" W6 a5 K" Y
try:
, P4 y" \; {% |6 Y, `    # Connect to server and send data
4 k6 h: t' C) V9 }; E( Y' l9 W    sock.connect((HOST, int(PORT))
; e7 K# }8 ]! S        #data= "123456789"5 l3 a, l9 x3 K7 A0 Y4 X3 z7 G
        #s = struct.pack('bbb',1,2,3)
2 P9 F) c6 C9 C; p; I2 V    sock.send(sd.decode('hex'))- ~/ T. |0 T1 I' w# S5 a; A: e9 g
    print "Sent1 OK:"
1 d1 u0 x' a3 |2 Z9 }* [    print sd
& E, E! k, y5 O6 e7 ?    # Receive data from the server and shut down1 ~2 ?1 n$ y7 F2 A' M! ]: d! b
    received = sock.recv(1024)
6 v/ a8 E0 s$ F/ v) W. O- K5 c    print "Received:"
9 f1 @3 _. W+ U7 ^. w# T6 V    print_hex(received); R7 N4 c5 ]5 ~9 S4 Y8 }' ~
    print  'received len is 0x%02x' %(len(received))6 l. J: P' C# D0 f" N  l
    print  'received data analysis...'" @: v. I/ _2 T" E' h) U
    re1=received[0:4]
9 l9 `7 V) v$ {* t3 S4 A- x    print_hex(re1)
  Z9 t: P% ]" b3 ~3 j! U9 t    re1=received[4:6]
  T9 D# a2 u1 o' |6 H; I% f    print_hex(re1)
7 a; I: S8 }, t$ U. _    re1=received[6:10]
- |. {6 X: v) K: J5 `    print_hex(re1)4 T0 f2 c: {% H
    re1=received[10:16]1 w- W: n4 H5 E7 C3 Z# T
    print_hex(re1)
7 P6 J& U+ G4 r, a1 x% Z8 }2 _3 F- P, n: i
    #pack2 send
8 a7 Y" u% s' g) h) n! M6 ~    sock.send(sd2.decode('hex'))
1 }: I, Q5 q; R' M9 S9 L4 ?    print "Sent2 OK:"' ?# c. f$ D" M. A3 I
    print sd2( Q6 T5 W* c8 s# y
    # Receive data from the server and shut down
* S( s: H& j* ~2 l" ], Y4 G; h5 o    received1 = sock.recv(1024)7 B3 x9 H/ D0 E8 o! ]* S
    print "Received1:"
4 {5 m: o0 v. ~4 o6 Z8 z    print_hex(received1)
; F2 }. [+ t1 Z    print  'received1 len is 0x%02x' %(len(received1))% e0 x4 H# ?- V/ v. \; h2 w. L

  {' r& l. h& J% ^. X* B, i- tfinally:
5 o& s9 J* V# Z; t; h$ z* N    sock.close()
% f. E9 \/ r2 J! h! @1 l4 D9 j" h; x: N
s=raw_input('press any key to continue...')  \2 U' r8 X  W0 y% L

; W9 \4 A( q+ P2 _9 K+ |7 t* j# v6 @5 {7 @# m





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5