数学建模社区-数学中国
标题:
报文拼接与加解密测试
[打印本页]
作者:
2744557306
时间:
2024-3-31 17:21
标题:
报文拼接与加解密测试
# -*- coding: gb2312 -*-
, M: H$ g+ M" L) H# @
import socket
% ^: h$ I5 N: Z) h
from myutil import *
' V( c }* Y) i/ _- V
from binascii import unhexlify as unhex
9 Z& A# t, ?5 C! f+ d4 f8 s5 ~
from ctypes import *
/ @9 b$ W' s& V/ ]1 I1 {
dll = cdll.LoadLibrary('mydll.dll')
) E6 W: B% m( y
print 'begin load mydll..'
7 P" i D; e& q( ]3 _
#key
& s# T+ H. e9 l' F
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
8 w# z( k, X. C
#output MAC
5 v6 {: e6 R( E) c: G/ t
mac='\x00'*8
: P2 w# i( W; q( w3 ], g1 v
data='\x00'*8
$ e2 u: ~; c0 O" ]
pkey=c_char_p()
% {) p0 }7 e1 z6 Z5 e6 ^9 p9 U- y
pdata=c_char_p()
) z, I" q6 W$ K& V. u/ W
pmac=c_char_p()
/ d E5 W/ M3 i. H& f c' p6 _ F
pkey.value=key
* E& u8 G9 L$ Y$ c7 `+ f
pdata.value=data
& C' l* {: P* g
pmac.value=mac
0 r- {2 p6 O2 V% j8 [
#pack1
# J9 t$ U# h+ g5 _, N8 M4 W3 R
class pack:
5 D. W D0 ^- @: S6 K
pass
6 g# n" Y( i) V5 Y. N3 v; u) Y
pk=pack()
2 l/ a/ I8 @$ w; b
pk.len='00000032'
+ o, K6 w' `4 [; E7 q- D4 S
pk.ID='0001'
8 q7 K2 F% l( k" q8 ~' \+ f
pk.slnum='00000004'
3 x- Z( l2 S$ Z( w% u' \
pk.poscode='123456781234'
+ l4 E8 o( Q2 z w8 t/ t
pk.rand='1122334455667788'
' Q6 f+ E8 A6 @( @
pk.psam='313233343536'
! o# X7 x9 \! e& e
pk.kind='0000'
+ L/ D) J' {$ s" L
pk.ver='000001'
$ c( C' l @( j0 ]
pk.time='20140805135601'
2 \, e# f/ _# q( A. J! h, {7 @
pk.mac='06cc571e6d96e12d'
6 t" x; o+ }: |
: A: y8 D e9 U9 r7 @% Q( E3 W
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
9 }( j9 p0 j0 k8 P$ V
#print_hex(data)
: v$ b; o9 i% @4 ]; ?% y7 {7 N
pdata.value=data
( G. y2 v! E2 d6 S
#cacl MAC
7 C0 m$ \& d' ^ G6 d
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
/ C7 |5 A( F _# D5 j
stro= pmac.value
, F8 ]$ B s$ p. v! ~
strtemp=''
* @9 j. a8 A6 _" }; U& M
for c in stro:
) E" ?( ~! I6 ~8 u% ^$ L
strtemp+="{0:02x}".format(ord(c))
6 n# U7 U1 q3 G
#print strtemp
% R$ _ h4 w) J- U" o
pk.mac=strtemp
[! K% a% o; `
#data to send
- r3 F5 c" \1 W& I
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
9 ^5 e2 D7 C7 O2 u8 F2 m
print 'send1 len is 0x%02x' %(len(sd)/2)
% `" z7 @' h5 C
print sd
9 D! o, Z+ ]+ W- f5 S
#pack2
% \4 Q* A, d4 A: y8 m
class pack2:
' s, Q9 W' {# x4 M4 n( f, Q
pass
2 J3 U- a# w" d# `% L+ k* T
pk2=pack2()
; J7 ]! u6 Y" ?
pk2.len='0000006E'
! @1 I$ j, b2 V: h
pk2.ID='0012'
+ n' N$ N" @2 D
pk2.slnum='00000005'
$ h' w+ D, L; o4 e0 o
pk2.fatCode='00'
0 q/ V3 D/ J: k1 D, T
pk2.cardASN='0000000000000000'
' @" T: U7 l& q0 B
pk2.cardType='00'
# P" J* c% o( A1 m d
pk2.userNO= '0000000000000000'
* G/ ?, L/ _3 L+ I" w
2 h U3 x; Z% e3 v9 f6 H' ]
pk2.fileName1='00000000000000000000000000000015'
9 M3 q4 ^ z9 G3 M" O
pk2.dataLen1='00'
, j" K& z6 j/ c" Z2 L, f
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
2 U% e" E9 d) P/ x% G J
pk2.fileName2='00000000000000000000000000000016'
* Q/ [/ ^$ v1 R/ X! {
pk2.dataLen2='00'
2 _ x4 u2 E% T/ I, Q" r1 B
pk2.dataArea2='000003E800FFFF16'
; p k% x+ `8 U, W) Y
pk2.mac='06cc571e6d96e12d'
5 T* Q5 I" |) @- [1 z. Z1 ^! W
9 \' ~4 Z6 h% @6 ]
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)
! J4 H% W& t5 M7 a' f* j
# I# U1 a$ w* u
pdata.value=data2
5 K* e0 }! l- U) {7 p G4 F
#cacl MAC
- N9 ?) v; W K( P5 k+ M2 {
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
- A* B+ M$ i9 @/ n# R) `3 j
stro= pmac.value
' ]/ E; Q% L9 Q6 A
strtemp=''
" i# n) V" w. N0 X
for c in stro:
6 U& A0 f3 z. |2 M6 K
strtemp+="{0:02x}".format(ord(c))
8 P( F/ c: x3 a) K" o. E
#print strtemp
1 X, L8 t$ @0 U7 d7 {" e1 T H5 x
pk2.mac=strtemp
6 U* p4 D" H: B; ^; T' Y5 `/ P4 L, _
#data to send
. V4 q7 i" n, \) ~0 l" i3 O
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
& d4 t1 |4 {/ L; ~0 f
: r( g7 e8 J% u+ z4 k3 H
print 'send2 len is 0x%02x' %(len(sd2)/2)
m8 n' w3 p. `: Y
print sd2
0 Q' a) {& y, n- T8 p) e2 l& [& z7 c8 J% A; [
& k# O8 k; w1 e; Q3 w
, E9 O/ |! l4 K4 x
#PORT="192.168.60.37"
$ a/ L, R, z/ G" p9 P
#PORT="localhost"
) {8 H/ }/ [9 a e; w, ~$ D
HOST, PORT = "192.168.51.28", 5800
# I9 J+ J0 ~; T) N0 x2 y
# Create a socket (SOCK_STREAM means a TCP socket)
' Z1 h3 q7 Z. \, w# f; y* t7 D" U
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
& [! z1 e( [3 v- n# W% U
try:
6 Q+ {% {* ]% ~, |0 S# G
# Connect to server and send data
4 V, j! ~2 Z6 n7 ^2 E' s' m: N
sock.connect((HOST, int(PORT))
( }/ u6 z* [8 Y* q
#data= "123456789"
, U0 j' a# m, Q0 W/ }
#s = struct.pack('bbb',1,2,3)
: ?9 ]" t! S+ ^! g; A; E- g, C$ O- }
sock.send(sd.decode('hex'))
) Q& L8 M5 @6 A1 J/ R5 i, X) [
print "Sent1 OK:"
+ b1 R! }5 C4 |0 a
print sd
+ M) m, C% @5 b N9 E
# Receive data from the server and shut down
- P! K, c$ j7 f3 \* B$ F3 l
received = sock.recv(1024)
: y; [; Q4 U6 ^0 J w# _
print "Received:"
* q; |/ ~( j3 x8 ]0 D3 o) ~6 L4 h
print_hex(received)
, N1 B; t( X5 K/ y, ~; m
print 'received len is 0x%02x' %(len(received))
8 b0 l7 g9 }( G5 ^' z1 _& d
print 'received data analysis...'
7 Y9 d. _/ n+ D I4 c
re1=received[0:4]
6 F4 y; V" i2 |/ z \2 }/ E
print_hex(re1)
" s+ ^: s/ y: T5 ] C
re1=received[4:6]
$ y, O5 P1 k4 [7 r3 y- W$ ]
print_hex(re1)
4 g; D( _) N8 H- {7 U+ [* G
re1=received[6:10]
" b3 y: ]: u& {8 z9 K: e6 Q- k" W1 V
print_hex(re1)
* k! c! h9 J, c: W' e8 m) Y0 v
re1=received[10:16]
+ ]" p5 b8 I/ J
print_hex(re1)
: w3 U k _. y, d& ^5 V+ _6 }! i) q0 r+ c
) Z5 J, W, T* D& C7 G. R
#pack2 send
) d& Q* s) K9 {; R4 L
sock.send(sd2.decode('hex'))
) n6 s" t* o1 k2 `' B) @# A0 c
print "Sent2 OK:"
( V, i& u; V* C0 A( m
print sd2
`( X! T% r0 g$ C5 y
# Receive data from the server and shut down
5 J. j$ I+ u; D8 E5 W$ `6 j9 }" Q$ v
received1 = sock.recv(1024)
- F" x4 r; F; ^6 Z( ^
print "Received1:"
2 C# P1 n E! V& A
print_hex(received1)
6 A( t8 ~, t' I6 J9 k
print 'received1 len is 0x%02x' %(len(received1))
5 p" W5 y- c' F7 E$ Y
! g2 u% L% \% U z9 T0 u* D" t
finally:
4 U6 d% K0 C" M$ Q4 H
sock.close()
" f% I( A7 N* ~# T9 f
5 S3 [$ @/ Y8 M! d% h2 i1 k) c
s=raw_input('press any key to continue...')
% r$ l: ?, v. ~% I2 e7 V. r
. s: Y+ n: k g# y7 b
( f D5 W) T( _
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5