数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-31 17:21
标题: 报文拼接与加解密测试
# -*- coding: gb2312 -*-
) A; y# X" s( f; b6 m( V& ~4 A+ A4 Simport socket
( f& x! t- z8 X  T* u! y8 K2 a4 f# {from myutil import *
! b$ \8 K( g+ }3 E# Zfrom binascii import unhexlify as unhex
& m/ ]% w# ~# I+ e7 X/ i2 l$ mfrom ctypes import *
: d+ s, T% ^& C  b, ]4 V9 Kdll = cdll.LoadLibrary('mydll.dll')) N% o6 y5 I/ {4 I$ X5 j
print 'begin load mydll..'
9 k/ U+ s  |+ C5 T- V# c#key
9 V! h8 }6 P4 k- V2 G' tkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
0 [# h2 L; T# a* P  M4 _) L#output MAC
, j9 B9 S; B) m. D9 A6 L5 \# gmac='\x00'*8
5 n( Y; S8 B( mdata='\x00'*8# ^+ r7 O+ I% l
pkey=c_char_p()1 v4 ~  }' f" B% o1 Q8 ~
pdata=c_char_p(); `6 |9 ~1 p5 @2 j: i( D
pmac=c_char_p()
1 Z- _# i4 o7 f0 c8 {( wpkey.value=key4 }/ V. Y8 W- o6 {" {  d' f6 Y
pdata.value=data/ E4 g. s, P+ Q
pmac.value=mac
: |. E, L  l8 p! Z! _) t#pack1( A- `! p5 k0 Q! ?+ f7 ]" j
class pack:4 o* d8 _% r1 L
   pass
* b! b8 g7 E1 j0 P$ [, K# |pk=pack()( F/ j4 Q& A/ F& D1 n/ e+ j, \% h
pk.len='00000032'/ ?, D1 J4 S) e& g' w7 Z) d
pk.ID='0001'
) N& p- \( D, B/ x0 c9 spk.slnum='00000004'$ U8 h2 o0 ~! `5 n& i7 K1 i. x5 A
pk.poscode='123456781234'# g) M% I5 H& l" U7 I5 ?0 w5 L' M6 E
pk.rand='1122334455667788'. {7 }' b# _. X8 |  _+ f
pk.psam='313233343536'
* x/ h. M4 T4 w7 j  Rpk.kind='0000'
2 q. R  t5 P6 b2 ^* h# Npk.ver='000001'  [6 A% ]: C. x& N1 R
pk.time='20140805135601'% Y/ K1 q0 U0 o3 d1 N& z
pk.mac='06cc571e6d96e12d'$ H3 i7 l0 A6 G; W
* P0 t% s7 b( S5 M7 _) z
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
$ t! ^, ~" o* F0 V3 h  B#print_hex(data)
7 r4 J$ H) `$ l$ R) P( epdata.value=data4 b2 h7 S3 o$ o$ [+ [* U
#cacl MAC! c6 C8 j- O: i/ Z- L1 B6 F
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
% E% x5 A' K# V4 n5 F5 _' Mstro= pmac.value8 G8 t( O7 P: v7 G
strtemp=''1 `) I9 j1 \5 z! a
for c in stro:
4 s' r8 O* P+ u5 J    strtemp+="{0:02x}".format(ord(c)); M2 o( X3 g2 v
#print strtemp
5 [+ T: b" a- vpk.mac=strtemp
8 G: }- ~9 ]" R  j# P3 A#data to send
7 X* B  V% W# c  W& qsd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
5 m* M; H3 d: `5 q5 oprint  'send1 len is 0x%02x' %(len(sd)/2). [# ]2 X! M6 y) n( g
print sd
  n2 p& k' g4 a5 k- U- R& f#pack2
% f! p, @! b, V+ v0 M+ Vclass pack2:9 K3 a( r1 L. X6 D+ U! ^
   pass1 P, K; [. V  ?% W3 w
pk2=pack2(): P: m1 B# k0 q- l
pk2.len='0000006E'
# B5 H0 O" s% R( Q, i% Z# Zpk2.ID='0012'
* K  s/ }( k  a) ~8 l. `* Rpk2.slnum='00000005'2 j. h. q. s+ ~" X
pk2.fatCode='00'
2 ^4 \0 ?5 U5 y- B1 L: d# e7 ^" c6 Kpk2.cardASN='0000000000000000'& N0 R: k: k& ?/ Q1 U5 |4 p* J
pk2.cardType='00'
0 V4 Z/ _) q) Zpk2.userNO= '0000000000000000'
1 w& d7 A' p% F4 P* p1 n1 L2 r( b% s! ^3 s
pk2.fileName1='00000000000000000000000000000015'
) \) r/ i2 S( Z2 {" }5 ^7 w8 I9 Opk2.dataLen1='00'
6 T, s- k5 H6 ~" _# L- S# a; ~1 `pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
/ e2 [' g. {! g5 L$ Y) N5 gpk2.fileName2='00000000000000000000000000000016'
" s8 Q0 B0 p% P1 B4 [/ jpk2.dataLen2='00'
2 D% M$ _$ f! \4 Wpk2.dataArea2='000003E800FFFF16'
- ?, W9 Z8 _) kpk2.mac='06cc571e6d96e12d'7 O, s3 h9 U8 l: _! B5 z, }) o
" [; F% u6 C5 H
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)
1 I6 P# @2 o+ N$ b- Z$ M, T3 y6 t8 J; s- }8 j2 Z' v
pdata.value=data2
2 c6 k. ^: i. ]: u6 H#cacl MAC; `. v$ T+ _& z! l7 Q0 M
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)! h2 ?, F- {9 U9 p7 N' U* n
stro= pmac.value3 g( i8 }3 l  O: O/ o3 B$ D. s1 r5 t
strtemp=''
( A5 h9 P4 E1 R9 X. u, f+ wfor c in stro:
4 e9 @" f' F& i* M! B    strtemp+="{0:02x}".format(ord(c))% @* n( P4 B/ {9 Y8 h
#print strtemp
* T' K# `6 y9 P0 S8 O; x7 O5 ppk2.mac=strtemp
, P/ [6 K6 D* i1 t- y( @2 B! e#data to send
3 x2 i7 i+ ]( A/ 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- v. \8 f% }, K' z4 k* l1 k6 N
. k  K6 |- _' n( x' v! T5 o
print  'send2 len is 0x%02x' %(len(sd2)/2)1 C3 f1 A0 W' F8 l3 p7 ~
print sd2
- b3 B% h, I( H  @! U" ?. n: [9 Q; m
/ A5 C: F% r. u) m$ b
#PORT="192.168.60.37"
: n7 Q  K2 U9 }  |( w#PORT="localhost"
% Y4 v* x* M: UHOST, PORT = "192.168.51.28", 5800+ a% O  M) @* N* G/ Q% r0 E
# Create a socket (SOCK_STREAM means a TCP socket)
- {( F2 H# T. j( |: |" g& gsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
/ Q8 ?* l" a$ ?0 H) G6 e. Q/ ]try:
7 J/ Y7 C  t5 m- C    # Connect to server and send data; t7 m9 u1 O4 h7 }
    sock.connect((HOST, int(PORT))( i0 a+ `: }' t# G: q
        #data= "123456789"$ n& G. |5 W% _3 i/ M
        #s = struct.pack('bbb',1,2,3)# {$ }6 O2 K, v1 J1 X' U4 H/ _9 d! ~- b
    sock.send(sd.decode('hex'))' p% |) L" n6 z( [, G% z; c( S: v
    print "Sent1 OK:"
; @$ ?9 A  u8 {3 z0 J    print sd7 ^4 S7 ~) w8 Y/ g8 H! i- R! }
    # Receive data from the server and shut down% Q, t3 h0 t- ^
    received = sock.recv(1024)
* K. i2 i& t' C" b* F    print "Received:"* J- A. `( U9 }9 K9 p
    print_hex(received)
: \0 F3 I6 h: x    print  'received len is 0x%02x' %(len(received))
- ^6 d2 b: z4 ^    print  'received data analysis...'  X6 v  D0 O. V" S: y! c% s9 f. V
    re1=received[0:4]% S$ l2 w! V" d
    print_hex(re1)7 P1 W/ W4 k3 t* d! L; M9 i
    re1=received[4:6]
' R# @( N, F4 E. [' @( y3 j4 u7 W    print_hex(re1)
, q, |6 V  w8 b5 p- M4 N2 v    re1=received[6:10]" `  O" n+ |' `4 u
    print_hex(re1)0 b5 X1 I6 m9 A! B! c/ Z
    re1=received[10:16]
4 s% `9 L$ C" U: m" E8 E    print_hex(re1)
; Z) O4 r& H$ K9 H7 W% e* J! L2 d; s3 e: u7 W- O/ l
    #pack2 send
4 Y/ N% v$ a% A/ m0 h) X5 u8 M    sock.send(sd2.decode('hex')). a8 E( P9 F; w- _2 {
    print "Sent2 OK:"
( C" _  r) s( T1 ?- q& e6 g- Y    print sd23 a- N7 I" v( e3 `/ C. d. U1 K
    # Receive data from the server and shut down
: c+ R& r  e* }/ f    received1 = sock.recv(1024), N) K4 V' d, N+ g( K
    print "Received1:"
, N& v* Y6 k6 n% ~9 o. M5 |    print_hex(received1)
; ?7 Z3 I/ u& D1 i7 M    print  'received1 len is 0x%02x' %(len(received1))1 y- ]$ }& q2 s2 b$ j, c4 y

5 _  l* p: g% Q; {- ffinally:& u# M) Z! U& V8 w) m
    sock.close()3 y2 c4 ]# f' t3 |: Y5 N
+ m* Q9 v. s+ x8 o+ `! F. g
s=raw_input('press any key to continue...')9 U* v. Z* _; J6 A5 n4 p( X0 a
+ @$ [9 A1 G, A, k6 V* J1 }0 o

: I2 e0 k2 u- a




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5