数学建模社区-数学中国
标题:
报文拼接与加解密测试
[打印本页]
作者:
2744557306
时间:
2024-3-31 17:21
标题:
报文拼接与加解密测试
# -*- coding: gb2312 -*-
( M. ]# `9 x. Z; W
import socket
3 ?' v4 y& D5 v/ R- }+ w- l/ S
from myutil import *
( @& x3 m( Q% E5 K$ r& X# K
from binascii import unhexlify as unhex
$ Q. C+ L+ v; w* t. s' j
from ctypes import *
# ?( J: d: `3 T+ S: s2 k/ _! p
dll = cdll.LoadLibrary('mydll.dll')
# o2 _, w6 }- `8 q6 V9 G' E
print 'begin load mydll..'
+ h1 L0 Y, H$ S, k7 M* t2 Q
#key
5 D+ k9 o6 \% R2 R' P
key='\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* r
data='\x00'*8
' ?5 _, Q7 W: o9 e# j3 d# d9 ]4 Y1 m2 N
pkey=c_char_p()
: M. t1 L; F) f8 g
pdata=c_char_p()
- {1 N) ]/ t) F- c
pmac=c_char_p()
0 a/ k) z6 C X- i+ B9 F
pkey.value=key
/ s0 B, A9 O" s6 Y; T8 A# V
pdata.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: H
pk.rand='1122334455667788'
+ h. M% p( N/ r$ g
pk.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 F
pk.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 r
dll.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 strtemp
4 r) l3 L- g8 |/ ~# d
pk.mac=strtemp
3 {' `; 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.mac
2 [+ 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 d
pk2=pack2()
' i' W4 K/ `! g
pk2.len='0000006E'
# J: R1 X9 |8 G) }" y) B* @( k
pk2.ID='0012'
1 n* y* N5 |, B1 m% {" e
pk2.slnum='00000005'
8 z, w( Q- h0 |3 ?. k# o( A+ q
pk2.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* ^$ b
pk2.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/ y
pk2.dataLen2='00'
" K/ Z% ^' ?; w% s% f7 H5 \
pk2.dataArea2='000003E800FFFF16'
, {/ v f6 C P4 l' L5 x; y
pk2.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 d
strtemp=''
3 ~2 Y' K9 H" r4 X& u
for c in stro:
$ L* T/ A" M9 C
strtemp+="{0:02x}".format(ord(c))
: R& H; J: C$ |- i' s
#print strtemp
2 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* a
print '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 B
HOST, 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" \: C
try:
, R( |' _) d: s" Y1 z& i
# Connect to server and send data
7 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/ F
5 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