数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-31 17:21
标题: 报文拼接与加解密测试
# -*- coding: gb2312 -*-( M. ]# `9 x. Z; W
import socket
3 ?' v4 y& D5 v/ R- }+ w- l/ Sfrom myutil import *( @& x3 m( Q% E5 K$ r& X# K
from binascii import unhexlify as unhex
$ Q. C+ L+ v; w* t. s' jfrom ctypes import *# ?( J: d: `3 T+ S: s2 k/ _! p
dll = cdll.LoadLibrary('mydll.dll')
# o2 _, w6 }- `8 q6 V9 G' Eprint 'begin load mydll..'+ h1 L0 Y, H$ S, k7 M* t2 Q
#key
5 D+ k9 o6 \% R2 R' Pkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
8 M( Z% n# u, n2 z! ]#output MAC
; `7 A2 C' t; W7 \" \mac='\x00'*8
5 b- v1 t+ F- g* rdata='\x00'*8
' ?5 _, Q7 W: o9 e# j3 d# d9 ]4 Y1 m2 Npkey=c_char_p()
: M. t1 L; F) f8 gpdata=c_char_p()
- {1 N) ]/ t) F- cpmac=c_char_p()0 a/ k) z6 C  X- i+ B9 F
pkey.value=key
/ s0 B, A9 O" s6 Y; T8 A# Vpdata.value=data# b6 @; Z+ b& \$ ?; W
pmac.value=mac
8 _0 N* B* {3 L' @% N# |#pack1& |) d2 c9 t) N' X, d
class pack:/ T- l6 p( H& D! {
   pass) v3 f) f! A" i. f- o% C+ [
pk=pack()5 w9 f% E7 t; Q4 e
pk.len='00000032'7 E/ D" x$ n7 O& @
pk.ID='0001'* w0 ?$ N+ W; N  D
pk.slnum='00000004'
# D- F' s" i' v* }! h  Y, b3 l5 \pk.poscode='123456781234'
& X. A, s4 L# C: Hpk.rand='1122334455667788'
+ h. M% p( N/ r$ gpk.psam='313233343536'0 J! q, [3 t! V
pk.kind='0000'
2 T, M# Z' ~/ W: @* }pk.ver='000001'; x% ?5 Z" G8 z+ b+ r, \( z2 Z8 d
pk.time='20140805135601'
+ o9 v# F: B3 G7 Fpk.mac='06cc571e6d96e12d'. ?# k: t  H: {0 C' F
  |; W4 W* |9 m
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time). H) _1 g; h6 E' P6 g
#print_hex(data)* N+ ~2 }& ?  U" q
pdata.value=data
2 M- }) M& f4 y#cacl MAC
/ v. |: ]/ j0 v5 Q0 rdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)/ F, Q' E: Y+ k* r6 Z) b: l
stro= pmac.value: r% R  e/ z: a! ^, p( ?1 r# W' O
strtemp=''  v; Y0 S3 |' s* j, G4 W7 A
for c in stro:
/ v9 ?4 s1 o) j, r2 O5 p& i    strtemp+="{0:02x}".format(ord(c))1 \4 w" t6 u6 I6 G5 ~
#print strtemp4 r) l3 L- g8 |/ ~# d
pk.mac=strtemp3 {' `; h# g4 {5 y
#data to send  [4 V0 k4 {- p: r1 X) F: i
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac2 [+ b/ [6 F5 V- J! ~7 b
print  'send1 len is 0x%02x' %(len(sd)/2)& v) h; X' A: N3 N
print sd
2 o: J8 [( `. g( a#pack2. ?. ?) }7 o0 Z; u
class pack2:
4 d5 I+ A# H! B, D0 e   pass
7 ?+ V+ k/ x' h+ s4 K9 dpk2=pack2()
' i' W4 K/ `! gpk2.len='0000006E'
# J: R1 X9 |8 G) }" y) B* @( kpk2.ID='0012'
1 n* y* N5 |, B1 m% {" epk2.slnum='00000005'
8 z, w( Q- h0 |3 ?. k# o( A+ qpk2.fatCode='00'0 t' ^& p4 A* B2 r
pk2.cardASN='0000000000000000') {& S; Q4 T; h$ H3 H
pk2.cardType='00'& V7 \' |& g% }2 G2 y( I- e& z
pk2.userNO= '0000000000000000'& s1 r9 O& C" \8 e5 y, s# [" S

4 N' O$ f1 U: g2 C* ^$ bpk2.fileName1='00000000000000000000000000000015'# c: T! ]! R. U# D
pk2.dataLen1='00'' ?2 e. K: V7 l- Z1 |
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'# r3 C+ \3 X" a# s* S3 r
pk2.fileName2='00000000000000000000000000000016'
5 L- v" D9 u/ c/ ypk2.dataLen2='00'
" K/ Z% ^' ?; w% s% f7 H5 \pk2.dataArea2='000003E800FFFF16'
, {/ v  f6 C  P4 l' L5 x; ypk2.mac='06cc571e6d96e12d'5 ], @  I6 c  f9 c6 l) i
! E4 @5 z: x) n# T6 d) 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)0 a/ l  x9 ~, g9 C
# C% t5 j" R' ^" d# x8 C4 g( T. c
pdata.value=data2- l, Y* {7 Y3 m" u8 W8 X
#cacl MAC' e: K0 V+ h8 {  _
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)) N: L+ t* \& ?& }  p5 I
stro= pmac.value
- _6 L8 r$ u5 p0 dstrtemp=''
3 ~2 Y' K9 H" r4 X& ufor c in stro:
$ L* T/ A" M9 C    strtemp+="{0:02x}".format(ord(c))
: R& H; J: C$ |- i' s#print strtemp2 F  O' N! U  J" b6 }% H7 v
pk2.mac=strtemp; q# r6 @  c" r5 J8 D8 Y
#data to send, C# ~7 F0 r2 x
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
( K$ w6 ]1 p$ R
1 N9 L0 n5 Q  ?% c6 z* aprint  'send2 len is 0x%02x' %(len(sd2)/2)1 S4 ^( d* X3 m* r( O
print sd2
+ [1 ^0 O" T3 U4 W/ D$ R0 r' O
5 R" R3 v& m; B2 m( Q
# ]. d! m: N. m0 f#PORT="192.168.60.37"
) g( k. e4 a$ Q4 s7 M9 Z#PORT="localhost"
( i4 D% o# e, u  r2 BHOST, PORT = "192.168.51.28", 5800
& M; `9 J% E# r" c$ K# Create a socket (SOCK_STREAM means a TCP socket)2 t2 d/ Z! B- Z; u* B8 I9 j
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
" \4 D+ C) O/ Z" \: Ctry:, R( |' _) d: s" Y1 z& i
    # Connect to server and send data7 l' ]4 n  B! l* j2 i* N+ p; l
    sock.connect((HOST, int(PORT))
$ C2 G/ A5 }/ x$ Z' g7 q/ A        #data= "123456789"* \4 h1 w  J/ D+ P) b8 q
        #s = struct.pack('bbb',1,2,3)0 p0 i6 i" O5 ]" a& ^
    sock.send(sd.decode('hex')). {* v4 S- {( R5 M7 M, |! C
    print "Sent1 OK:": W" F: t3 y: d3 y5 W+ @7 }7 [
    print sd* j+ z+ v9 o' h6 }" x2 C% w8 P* r
    # Receive data from the server and shut down; B' d. G9 T8 @. l- V
    received = sock.recv(1024)
1 C8 T- }! s* r3 j$ p    print "Received:"/ |0 M- ~* `* [6 |+ R! p4 D
    print_hex(received)
& b5 i6 K+ r, `$ J/ d2 J2 x    print  'received len is 0x%02x' %(len(received))
; q9 V. k0 Q9 J; Y    print  'received data analysis...'
# ^, }6 m' i  G$ M    re1=received[0:4]
8 y4 C  o$ n5 z% C/ D  w; W' C    print_hex(re1)
+ u& F! a9 N# {+ T/ c+ J, m0 Z    re1=received[4:6]
5 _6 k" u' ~/ o' v6 O9 Z7 a; P    print_hex(re1)
7 E7 _& m% }* w5 Z. _! F    re1=received[6:10]: f/ [3 F2 B' S; w: r1 ~
    print_hex(re1)
8 I3 M/ I! f; S3 Z. a3 N$ u) P    re1=received[10:16]
1 F: @. W3 N8 g! T    print_hex(re1)
( O0 G3 ?7 O/ F5 z, E0 V/ a8 u2 @. b  Q9 ?
    #pack2 send
& B* v2 A0 _7 Z  ?- v7 w) e    sock.send(sd2.decode('hex'))5 X+ Y( u7 P/ E; I( k0 G& |) D
    print "Sent2 OK:"8 J' P# H6 a7 ^: j. K
    print sd2
+ U/ b. C- \! x& I2 |    # Receive data from the server and shut down# T8 z+ P3 x6 f- ^
    received1 = sock.recv(1024)  \: a$ Z  Y8 K  C
    print "Received1:"
5 W/ b& V: B1 n1 d' z9 @    print_hex(received1)1 ~% H* B7 V+ `7 P# N: N- K! d
    print  'received1 len is 0x%02x' %(len(received1))
/ w0 I3 U5 b& `# \' i, V+ U4 t) R6 ]8 f+ R
finally:
9 E+ o' _, G& u' Q! I3 K    sock.close()
. h1 ~) F* X( B7 f+ n, J9 V% T  g0 j
s=raw_input('press any key to continue...')
( j/ l+ R& z: U
( l' j/ O$ B- s. u- t1 \2 v! O5 h/ b. w" D. a3 z





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