数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-31 17:21
标题: 报文拼接与加解密测试
# -*- coding: gb2312 -*-, M: H$ g+ M" L) H# @
import socket
% ^: h$ I5 N: Z) hfrom myutil import *
' V( c  }* Y) i/ _- Vfrom binascii import unhexlify as unhex9 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( yprint '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/ tmac='\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- ypdata=c_char_p()) z, I" q6 W$ K& V. u/ W
pmac=c_char_p()
/ d  E5 W/ M3 i. H& f  c' p6 _  Fpkey.value=key* E& u8 G9 L$ Y$ c7 `+ f
pdata.value=data& C' l* {: P* g
pmac.value=mac0 r- {2 p6 O2 V% j8 [
#pack1# J9 t$ U# h+ g5 _, N8 M4 W3 R
class pack:5 D. W  D0 ^- @: S6 K
   pass6 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 ~' \+ fpk.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& epk.kind='0000'
+ L/ D) J' {$ s" Lpk.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 ddll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
/ C7 |5 A( F  _# D5 jstro= 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.mac9 ^5 e2 D7 C7 O2 u8 F2 m
print  'send1 len is 0x%02x' %(len(sd)/2)
% `" z7 @' h5 Cprint sd
9 D! o, Z+ ]+ W- f5 S#pack2
% \4 Q* A, d4 A: y8 mclass pack2:
' s, Q9 W' {# x4 M4 n( f, Q   pass2 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, Tpk2.cardASN='0000000000000000'
' @" T: U7 l& q0 Bpk2.cardType='00'
# P" J* c% o( A1 m  dpk2.userNO= '0000000000000000'
* G/ ?, L/ _3 L+ I" w2 h  U3 x; Z% e3 v9 f6 H' ]
pk2.fileName1='00000000000000000000000000000015'
9 M3 q4 ^  z9 G3 M" Opk2.dataLen1='00'
, j" K& z6 j/ c" Z2 L, fpk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
2 U% e" E9 d) P/ x% G  Jpk2.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) Ypk2.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* updata.value=data25 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 jstro= pmac.value
' ]/ E; Q% L9 Q6 Astrtemp=''
" i# n) V" w. N0 Xfor 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 xpk2.mac=strtemp6 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 Hprint  '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, ~$ DHOST, 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 data4 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