数学建模社区-数学中国
标题:
报文拼接与加解密测试
[打印本页]
作者:
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+ f
from myutil import *
: z0 P4 _3 k& T
from 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* X
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
5 o3 R, a- K' _0 J0 j
#output MAC
! Q" X; Y# {2 G
mac='\x00'*8
1 i# M1 ?" h: n: z; `/ K
data='\x00'*8
R& D: j, b% F
pkey=c_char_p()
. ~' F$ Z8 b* |7 Y z
pdata=c_char_p()
( s. r* l$ X0 u- U1 P3 [$ H
pmac=c_char_p()
3 a" b- T! r3 l0 Q- C/ R4 |
pkey.value=key
9 C1 G8 `# T' S4 X
pdata.value=data
8 s' ~0 ~2 o* y: h/ C+ a/ s
pmac.value=mac
7 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 y
pk=pack()
$ N8 r( z6 {7 T! S& z) d
pk.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 H
pk.poscode='123456781234'
1 ?! w8 \5 d6 c" k
pk.rand='1122334455667788'
* _1 @# J% H0 W: u" B9 [+ o
pk.psam='313233343536'
, w# s5 ] Y! v0 F
pk.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: b
data=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 P
strtemp=''
+ }( 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 send
4 _' 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" m
print sd
- P# h( \5 n+ X8 r
#pack2
, o7 G2 a [& J+ `* U
class 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- R
pk2.len='0000006E'
1 e' Q$ u) X$ o$ E P) \
pk2.ID='0012'
& H( j' Q2 c9 z' v
pk2.slnum='00000005'
2 [% _/ v; v: S* E) p0 I& o
pk2.fatCode='00'
% m. C3 ^$ }) k' g
pk2.cardASN='0000000000000000'
) P: r9 @ m0 a
pk2.cardType='00'
6 ]# Q @/ u4 w2 P$ p# I* P2 Y W
pk2.userNO= '0000000000000000'
* B0 u& U& ^" C" S$ U0 @
! c0 {. A; n) ^! C' Y+ I
pk2.fileName1='00000000000000000000000000000015'
( O$ J2 A! Z/ N+ [2 P I( j+ p
pk2.dataLen1='00'
; f; ?/ v; S9 a9 s
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
6 ~; X; o- _% o* ^; J
pk2.fileName2='00000000000000000000000000000016'
9 X) m$ T- t2 f3 p/ T/ c; E
pk2.dataLen2='00'
- L7 a- n( F, `
pk2.dataArea2='000003E800FFFF16'
2 u+ H! a } v8 N% \& E
pk2.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 Y
pdata.value=data2
; g" t; L& A# z7 T! Q+ g* r
#cacl MAC
- U9 |: K) N* X! i7 M" k0 V9 r
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
$ D, \: ?, J5 o+ g( e- T' r
stro= pmac.value
% p6 z0 ? r5 \) w- u
strtemp=''
/ J$ Q0 b" {$ p" Q. F2 h
for 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/ p
pk2.mac=strtemp
l; T! {$ b! e2 e8 q6 y8 q
#data to send
9 ^( Y5 w; \! E) J9 T5 S
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) m3 J3 G$ T0 L7 V
5 Y0 O1 H; H, ]7 ]% M7 K8 X
print '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 W
HOST, 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 down
1 ~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, a
1 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- t
finally:
5 o& s9 J* V# Z; t; h$ z* N
sock.close()
% f. E9 \/ r2 J! h! @1 l
4 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