数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-31 17:21
标题: 报文拼接与加解密测试
# -*- coding: gb2312 -*-
2 R* H$ ?! [; }+ C9 f5 o3 limport socket
6 L' g; w4 Q2 y4 t5 n7 Gfrom myutil import *
# n  i/ Y9 O' k- |* J) V; Qfrom binascii import unhexlify as unhex, X8 ^6 v6 {4 u, M1 ?
from ctypes import *  T$ j, i  y% h% Q$ h7 V; }3 L3 x. M
dll = cdll.LoadLibrary('mydll.dll')$ D0 \9 G/ U  F. D% D
print 'begin load mydll..'8 o3 x) d7 G0 J- L* M% _4 m6 J
#key# t9 }, x: Z. p2 J9 B$ q
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'" }9 Z5 c1 P4 a0 ]: D7 p* K4 x9 y. @; x
#output MAC( y+ e" }; H: `* x# }
mac='\x00'*8
+ u5 V# D% [9 s3 J/ \data='\x00'*8
4 }* `  K" K4 Q  h' Xpkey=c_char_p()- z, K& @3 P3 ]! p
pdata=c_char_p()
9 \; K* [' X* {, npmac=c_char_p()) k* l! V& l' j
pkey.value=key
# K0 {9 @6 D8 w: apdata.value=data
  M, Z+ Q# T* P/ n# i3 e: e4 I$ O* @pmac.value=mac' D; j! B$ Z7 N' E: h& v' [3 a8 ~
#pack1
! `" @5 h, h# Uclass pack:: M% u5 F# j; J0 ^( Y2 Z0 e7 }8 r
   pass* y+ N  s' [' F9 z3 p1 b
pk=pack()
9 K. J* x7 M5 a" R. Epk.len='00000032'
$ h6 S/ V3 A) [! }7 R& u+ N) J% spk.ID='0001'! b! E' E( |! |) P4 W: _* D
pk.slnum='00000004': O& K% \$ v. a) W6 \# l' r/ _
pk.poscode='123456781234'
1 c: _" z1 D, p8 j, gpk.rand='1122334455667788'4 x! _9 G* A! N
pk.psam='313233343536'! N+ @8 E2 ]  J) R; X
pk.kind='0000'7 }) m+ D; S' q) y. F/ K
pk.ver='000001'" v0 x, U% ?  l% n0 E, k
pk.time='20140805135601'" D4 F( z8 ?6 N: S
pk.mac='06cc571e6d96e12d'
% v5 V# k, n( a9 q( ]
# @" t7 A  }. Jdata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
! t" p0 R3 U# _6 w" G#print_hex(data)* a6 n# A9 D/ b' I8 E
pdata.value=data: Q' E' m& X& C/ {9 N) W& D( A
#cacl MAC
3 J  o; ]1 ]4 Udll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
2 a, f: [+ A6 o, `4 g/ W  D6 Q1 T- Wstro= pmac.value7 g9 I( f# i! ]" ~% S- |
strtemp=''0 \5 p; |  w! F& \+ ]6 Q7 Q
for c in stro:
3 L( c' V; x/ D, i6 {, o. B6 {    strtemp+="{0:02x}".format(ord(c))
! s8 C4 }$ d1 h#print strtemp/ ~, `- {3 C/ f! J' D, C
pk.mac=strtemp
' o( L4 t, [: ]  O# u#data to send
5 I$ ~2 ~, U  ?4 f- g6 t! w* nsd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
# e& N* N; c' g" ]print  'send1 len is 0x%02x' %(len(sd)/2)1 M: U9 r8 @  y* [* B
print sd, e3 A( I- ]) G
#pack2
9 ~1 b" p% S9 ~3 g2 xclass pack2:
6 ^, \  F  G3 k/ [# h   pass0 q9 X. d* n2 J# ?. i: {
pk2=pack2()' b. N( C" b( j. r! |% A+ T. I
pk2.len='0000006E'
# S" ^8 ?( G/ vpk2.ID='0012'6 O, Y, G3 m: k9 z+ _8 j
pk2.slnum='00000005'  M2 a) M. o# s# H3 g' y
pk2.fatCode='00'/ }+ H) e2 y) k4 H# S8 V
pk2.cardASN='0000000000000000'
2 [% v1 `; o# cpk2.cardType='00'1 F$ C& R9 E3 D% J
pk2.userNO= '0000000000000000', p2 c# @% h+ `6 |( I  Z& B! t
5 d  ]% d, k# e8 d' _% ^3 S
pk2.fileName1='00000000000000000000000000000015'+ B! ?6 }9 I$ D$ }: Q2 s9 s% O/ Y- s0 F; l
pk2.dataLen1='00'. e$ e! s, B, [0 K! D
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'0 Q5 F  o% N) x! I8 p/ S
pk2.fileName2='00000000000000000000000000000016'
: `" o6 Y" |' d* w0 E0 p8 Gpk2.dataLen2='00'( ~2 a8 X! ^; V* ?! j- p1 d, d
pk2.dataArea2='000003E800FFFF16'
  ?+ G& C" V' i; N) X  C1 rpk2.mac='06cc571e6d96e12d'
* k8 }( Y( }9 C- C* p
0 _$ m& p' \! l  bdata2=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)
- I- C1 F1 ]8 p6 s& s9 [3 r3 I* A/ F6 `5 V% W) D' ]- C5 |6 Q$ ]
pdata.value=data2
+ E, `) q! A4 b' Y; X6 U; B#cacl MAC
* F9 ~: a( V6 q. h+ O7 Mdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
) {" _) _/ Q) Zstro= pmac.value# U3 c& |+ j) u8 Y0 ~1 c7 N' {9 e
strtemp=''0 o+ L2 J4 g$ Y' R
for c in stro:
0 u2 i8 m( g* Z3 }4 k9 l    strtemp+="{0:02x}".format(ord(c))
7 F3 V% G) }1 Y+ R#print strtemp& b* j- A6 I2 f0 n" g, n# g
pk2.mac=strtemp4 a4 P# @/ {. C  }( }- U
#data to send; M3 n  Z& K* n: f; }- y
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
% Z; T- z. a8 i, e/ E1 v4 W% x' Z' C/ w0 @" N, ]
print  'send2 len is 0x%02x' %(len(sd2)/2)4 X! X- x- w$ P$ l& n; A8 S
print sd2
* {5 x3 C1 q. c/ ^- m* T' B* D1 K! `
6 q6 V( m/ l) R+ n3 K. l
#PORT="192.168.60.37"4 ~5 o1 ]" P9 c6 Y
#PORT="localhost"& I: T! o8 Y1 ?& @6 e: ~
HOST, PORT = "192.168.51.28", 5800
& v1 r3 K* A: X/ \8 c# Create a socket (SOCK_STREAM means a TCP socket)8 o* _/ f' C8 r/ ]# J6 ^
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)3 A$ `" X" ~  T$ S
try:' A4 g+ T/ c+ b" d
    # Connect to server and send data
; N# j% R! n5 Y6 P    sock.connect((HOST, int(PORT))
! J6 R+ l! t' j        #data= "123456789"
6 S. ]" w9 V* k) x  ?2 f% d        #s = struct.pack('bbb',1,2,3)
' ~8 T2 K, Z) \6 C( `    sock.send(sd.decode('hex'))
1 w  e  W# c: |2 M+ [! K    print "Sent1 OK:", Q$ M* E+ Q. o" U
    print sd
1 h2 \4 c0 j2 c/ K    # Receive data from the server and shut down
  P: B- K/ L+ S    received = sock.recv(1024)3 s9 F, c) }3 V( V
    print "Received:"
/ J. z$ q8 N0 N. Y$ J- ~2 G    print_hex(received)
8 g) e  c6 |2 _! X    print  'received len is 0x%02x' %(len(received)). o8 Y3 Q) S9 I- w6 ]4 j, l& ^
    print  'received data analysis...'/ N9 U3 v; Y2 r( p' ^% R/ P9 N
    re1=received[0:4]
9 g; O2 c1 N, t    print_hex(re1)4 i& j6 A  ]- C0 [) \
    re1=received[4:6]
* G! q9 R, [3 z" E0 W) Q    print_hex(re1)  s9 E7 I; E" J3 ^& {- _
    re1=received[6:10]
# U+ K6 U+ y8 M; y) _8 G/ V    print_hex(re1)
5 o+ o/ t+ N. D: _& n    re1=received[10:16]
( F( {8 j( f% m* P0 V3 o# x    print_hex(re1)% ~" M( Z! M+ [! G( U# C5 P+ F
0 G+ U0 A" _$ x8 Z/ g1 L
    #pack2 send. O% \1 M  l7 K' O+ i) [, \
    sock.send(sd2.decode('hex'))& Y- B) P2 U, ~
    print "Sent2 OK:"4 ~& V- `/ f2 K; y9 k% K3 c& @. Q
    print sd2
9 S5 q" Y- b1 \6 N+ b& G    # Receive data from the server and shut down
3 M# i  p- x0 ~" w% o    received1 = sock.recv(1024)
1 G$ q/ e; Q3 {" O    print "Received1:"
/ T3 {, @: X: y$ d6 D5 ?1 [    print_hex(received1)
1 Q% n) B/ U! T9 g6 X: V7 `    print  'received1 len is 0x%02x' %(len(received1))' ~$ F% I. D0 h2 e$ k
: V$ H6 |+ M2 h# n* P# i
finally:% G2 v' B% o! `. e: G$ k( h" i7 d
    sock.close()
, l# E- S7 g  b  j4 M( y" G4 g# b- w  Z+ D
s=raw_input('press any key to continue...')0 s0 N- R  h" x
+ F$ H$ k  T" F8 O0 V5 ]

. c  p. c. E# m5 x8 x- ^' s, U




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