数学建模社区-数学中国
标题:
报文拼接与加解密测试
[打印本页]
作者:
2744557306
时间:
2024-3-31 17:21
标题:
报文拼接与加解密测试
# -*- coding: gb2312 -*-
2 R* H$ ?! [; }+ C9 f5 o3 l
import socket
6 L' g; w4 Q2 y4 t5 n7 G
from myutil import *
# n i/ Y9 O' k- |* J) V; Q
from 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' X
pkey=c_char_p()
- z, K& @3 P3 ]! p
pdata=c_char_p()
9 \; K* [' X* {, n
pmac=c_char_p()
) k* l! V& l' j
pkey.value=key
# K0 {9 @6 D8 w: a
pdata.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# U
class 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. E
pk.len='00000032'
$ h6 S/ V3 A) [! }7 R& u+ N) J% s
pk.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, g
pk.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 }. J
data=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 U
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
2 a, f: [+ A6 o, `4 g/ W D6 Q1 T- W
stro= pmac.value
7 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* n
sd=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 x
class pack2:
6 ^, \ F G3 k/ [# h
pass
0 q9 X. d* n2 J# ?. i: {
pk2=pack2()
' b. N( C" b( j. r! |% A+ T. I
pk2.len='0000006E'
# S" ^8 ?( G/ v
pk2.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# c
pk2.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 G
pk2.dataLen2='00'
( ~2 a8 X! ^; V* ?! j- p1 d, d
pk2.dataArea2='000003E800FFFF16'
?+ G& C" V' i; N) X C1 r
pk2.mac='06cc571e6d96e12d'
* k8 }( Y( }9 C- C* p
0 _$ m& p' \! l b
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)
- I- C1 F1 ]8 p6 s& s9 [3 r3 I* A/ F
6 `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 M
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
) {" _) _/ Q) Z
stro= 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=strtemp
4 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/ E
1 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" G
4 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