QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2647|回复: 0
打印 上一主题 下一主题

报文拼接与加解密测试

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-! ~( i+ T2 H( b9 R
import socket
1 a: j& M3 w7 R; Efrom myutil import *: s) p2 u2 n, ]. a2 S. m7 k
from binascii import unhexlify as unhex
9 [- H" I: d0 h. ?from ctypes import *
2 I& b9 n+ g: Y9 ndll = cdll.LoadLibrary('mydll.dll')! T( {) N* G) o" t' x9 f
print 'begin load mydll..'1 @7 O9 ?. c* A0 p# a0 p, ^( b
#key
/ c' P9 J. x  A7 ekey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
, g* e1 a7 r. D/ \5 k+ Z+ P3 U#output MAC( P# {* {0 V" |% m
mac='\x00'*8
6 F3 L4 H7 Y* I3 T/ vdata='\x00'*8# I+ o% ]6 t' m0 z7 L
pkey=c_char_p()
2 h! m* R) ?+ g$ K) _pdata=c_char_p()
/ |& t6 O4 r3 G. P1 |pmac=c_char_p()5 M4 d4 e1 B" q3 T8 z! V. b
pkey.value=key6 o' ]8 b; ?+ b6 F
pdata.value=data
% C0 }" Z/ N8 X# Y: l1 ypmac.value=mac
: B& i( Y0 G  i  R1 l#pack1, G4 d/ C3 {3 u' F! a' T2 n3 \
class pack:
2 [4 E$ Z1 z6 S+ m2 g: S   pass, r2 o8 V1 C: C% O  j. @
pk=pack()
. ?4 b/ l5 b/ A8 f. m0 m4 V3 g: _pk.len='00000032'
1 ?; |, W& j! ]4 j: e& Jpk.ID='0001'
5 E0 U  E) s6 _, B) Qpk.slnum='00000004'9 J" c" l. r4 C
pk.poscode='123456781234'
8 K: E1 `3 \3 E' T& ppk.rand='1122334455667788'
" [; \, S: u, i1 l; M4 Y. Tpk.psam='313233343536'
* U' B( D: r8 c4 v4 i& D# Ppk.kind='0000'
) j* B- S) {9 q6 Z, _+ q" W, zpk.ver='000001'
% k$ I, y# F4 s( K. e0 s+ I5 j' \pk.time='20140805135601'
* o. z) B" G! s" U% apk.mac='06cc571e6d96e12d'
, p5 ?6 F% J1 N( c9 |. n; Q3 |
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time), c. N6 v" i- w/ f  w+ F' J  @
#print_hex(data)8 T# {3 b7 J, H" g# E
pdata.value=data* ~. Y: h! o& G$ Y$ i
#cacl MAC
0 g* a' T, H+ f3 w& Q6 Udll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
; @' m/ h9 x' s* \8 I% Bstro= pmac.value; ^( F# l; q, ]. Q; p/ j
strtemp=''
- l7 P- q, m: k- H4 Q' D  I" U& efor c in stro:+ K3 T$ b' L# E& l3 Y
    strtemp+="{0:02x}".format(ord(c)). N% g+ g4 R) i1 l# w# i
#print strtemp# [* l$ D/ ]" A3 R( q
pk.mac=strtemp, s# }: ?' }( F4 Z* d
#data to send5 z' n6 _! C6 N* T# n  j
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac3 m4 {5 u: C& k, k* b3 G  x
print  'send1 len is 0x%02x' %(len(sd)/2)
  S% p) k- v- F0 b3 m8 xprint sd  a7 ?! b, J3 Y6 `- Y
#pack2
: f# M& A+ O' n7 U) `- W2 \class pack2:0 f2 b7 c% ?0 n4 V- r1 [
   pass
8 Z; G4 }/ f# w: M. Rpk2=pack2()
( M# r6 R. ^4 Q! Opk2.len='0000006E'. n. ^) V9 m* Q; u: G
pk2.ID='0012'
( o; r. t$ v$ ?- Bpk2.slnum='00000005'
. k& W$ }& H, g" l, Y2 rpk2.fatCode='00'  Q* L2 Z7 z% J# b* E; w  L
pk2.cardASN='0000000000000000'( N; F! f5 v0 k: d4 H; {# x% W# W
pk2.cardType='00'+ M2 h' i0 W+ ?5 k3 S
pk2.userNO= '0000000000000000'
) {% v3 D1 |4 a4 j" Q; q* n1 I) G+ s4 R
pk2.fileName1='00000000000000000000000000000015'
& ~4 ]: V, r8 Bpk2.dataLen1='00'5 U* @. o3 n0 E! H( d9 _( V+ }
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
0 Z' Q1 r$ _7 Y+ _3 Z# z; Xpk2.fileName2='00000000000000000000000000000016'
4 Y! c  F8 u" J6 V0 Mpk2.dataLen2='00'* z. _$ Z9 [9 _
pk2.dataArea2='000003E800FFFF16'* r1 G7 G/ Q! i! i! S
pk2.mac='06cc571e6d96e12d'5 w, k4 N& D" e3 y

# Y/ K6 q8 Z) B' ~8 a3 v( jdata2=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 _& g, ?4 a+ v1 d8 m, q( l* C
. @7 o; w& e! ]" Vpdata.value=data2
4 E  f* C/ C6 e- X8 _#cacl MAC9 f1 Z+ I/ g, s1 V0 ~9 _7 B
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
0 I6 L& ^3 ^% v* ]7 }3 Q8 qstro= pmac.value
' e; u' [0 o  s  Xstrtemp=''
( X% G0 l, W# x0 J/ ^9 cfor c in stro:
' [# k$ O9 Q( W1 b0 }+ S- h    strtemp+="{0:02x}".format(ord(c))2 W; z7 w/ ?/ V# `7 k4 S+ @
#print strtemp
, ~6 ]& W! s$ x, R6 ]4 }2 npk2.mac=strtemp1 K: ~3 i/ \4 L9 K1 _
#data to send
/ G2 f9 o" W  w( csd2=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.mac8 V$ a$ G  D" W4 N5 v3 X
7 S. v! n' R' K+ E! k3 d0 H4 E
print  'send2 len is 0x%02x' %(len(sd2)/2)
4 o' `+ Q2 _9 m& H4 _print sd2. ]) M7 ^: G- }' _0 Q. f

, ^1 ~( r# W2 B& \( r. `
) G( Q/ C5 J0 u$ {: Y9 \#PORT="192.168.60.37"2 Q' _+ t' [: d
#PORT="localhost"
! i  p8 R4 c' K. EHOST, PORT = "192.168.51.28", 5800
5 v: y! o" R6 v1 S! u# Create a socket (SOCK_STREAM means a TCP socket)% @7 n( f: y7 T3 e1 h+ S
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
1 W( ~3 `: }; Atry:" i" D* c! c4 `+ t: n1 ^
    # Connect to server and send data' R  T' w' ]1 s( }
    sock.connect((HOST, int(PORT))
4 {: b4 T/ G& N1 P# n# M! S2 J        #data= "123456789"
' N- f$ y% `+ C/ s+ `5 g0 g        #s = struct.pack('bbb',1,2,3)0 k$ g0 \: T( P) h
    sock.send(sd.decode('hex'))
) N( B: u0 ^& e. ~1 P$ l8 L  }    print "Sent1 OK:": t" H) `# ~4 _8 w
    print sd
. `4 ?2 F- P8 t0 i! j    # Receive data from the server and shut down
7 s( L4 k9 W( O' i& z3 }    received = sock.recv(1024)9 E4 [$ j: X5 Z9 q* F/ e
    print "Received:"8 @' z4 E2 |% L1 s( f1 l
    print_hex(received)
, |* @, |6 k7 }. J3 j# ?% e    print  'received len is 0x%02x' %(len(received))
, x6 l6 ^5 f( i4 t* r! V1 ^    print  'received data analysis...'
' W1 X- o! ^& [" p' F- k0 o    re1=received[0:4]* U* D" R0 Q% A. @, F
    print_hex(re1)
9 _2 X/ K6 y- Q8 n! }    re1=received[4:6]
! q/ f, i  d  v* g9 q    print_hex(re1)
  f( S4 Z2 X3 J$ V    re1=received[6:10]
0 J! Z* v" d' d- B8 U    print_hex(re1)
! A; r9 B& s7 ?8 m) s5 \    re1=received[10:16]
3 U$ x4 \+ }5 [6 K/ }( ]    print_hex(re1)+ ~8 F; t) b0 N- b7 |# A/ t
) i/ v+ J# }: e
    #pack2 send
% K: B' L0 Q; b" G    sock.send(sd2.decode('hex'))0 T. p. E6 O8 g1 }7 W( V/ P
    print "Sent2 OK:"
" R8 H1 H; D: c3 e, u2 B    print sd21 o/ {* K4 r/ O( p
    # Receive data from the server and shut down
, ]* ]: W: _2 g2 m    received1 = sock.recv(1024)& |' a, x4 l/ k' r; p
    print "Received1:"' a+ s, a0 Y* d" `
    print_hex(received1)9 O1 L4 z( p. K  s$ }7 o
    print  'received1 len is 0x%02x' %(len(received1))
" e4 ?" u, F' R0 b  S4 S3 ]( X8 w$ |, T1 e( ?
finally:
0 A+ {( P0 k# k    sock.close()) }, d9 b: `6 [1 [: Q3 _- ?
8 B5 n$ w% w! `( W5 L' _2 I
s=raw_input('press any key to continue...')
: t4 D8 J* e" o5 V. f* M" c$ x1 O* j+ D# q6 S1 e- t3 y) ^
4 e2 _% I* }" v3 f" Y* A2 x6 P
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-6-2 22:37 , Processed in 0.591589 second(s), 51 queries .

回顶部