QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1175

主题

4

听众

2872

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-8 t: E$ _8 `2 x$ l- u1 _- V, l- i
import socket
# [3 _' g0 [% f; D" `8 yfrom myutil import *& \# G5 a1 {2 X( T9 f4 U
from binascii import unhexlify as unhex5 k9 f1 V* C& j5 G# T
from ctypes import *
% C4 z6 B& ^% o3 z$ _6 S* H4 V, Ldll = cdll.LoadLibrary('mydll.dll')& Q/ P! H/ a3 H$ t
print 'begin load mydll..'3 F' L4 u( t( Z$ V( b6 u
#key3 D7 u6 o8 e0 C5 c* c- H' C
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
" [: v2 k% @1 t0 y! M2 N5 B#output MAC
8 c3 J+ Y' f* e: ^mac='\x00'*8+ |; [7 S' d6 Y" Y+ [) s
data='\x00'*82 x5 ^9 m# {4 u/ j. I7 L+ Y6 H
pkey=c_char_p()3 T# c5 p7 c* T2 w+ e
pdata=c_char_p()2 y: S/ o2 ]: _" x
pmac=c_char_p()
  W" h7 r1 w' e/ K) C/ q4 t6 dpkey.value=key, q# Y2 |$ G( h6 p) L/ }
pdata.value=data
! c7 e; n% o( c- y1 Zpmac.value=mac! I& A2 U; \# u3 V$ C  s4 X2 w
#pack1
. B' ~0 H9 d6 l6 Cclass pack:
! L& G$ |0 Y5 G3 X* e   pass. y9 Z+ i- X* g9 G$ J
pk=pack()* `7 r9 K5 K4 e+ l& e
pk.len='00000032'
) Y( v; w9 t8 Y  vpk.ID='0001'
) k6 ?3 ~$ W; t3 J4 _' Kpk.slnum='00000004') h3 H$ D1 T: T5 U/ V
pk.poscode='123456781234'
( w) M/ C% H3 F- F9 G+ G3 W" G6 wpk.rand='1122334455667788'
8 \5 C$ t! ~) O7 A; F0 }: dpk.psam='313233343536'
8 P3 u  t, d; Z5 ?pk.kind='0000'  m, Q% W" ^' G: z, B
pk.ver='000001'
  y2 w: b9 |: h4 p/ _' npk.time='20140805135601'
2 ]" w/ p5 Z; D* R9 \  ypk.mac='06cc571e6d96e12d'+ r" t- W, y- |
. c* L8 _5 L/ _2 P+ L$ F3 c
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)# ^; i6 q5 |7 M# H- c
#print_hex(data)( i$ f! E6 [; H+ d9 B  D
pdata.value=data; m5 ~7 g; ~5 {7 m9 q/ S# e  o' I
#cacl MAC
$ G- ?& x" x+ udll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)% ^6 V+ c6 k2 O% Y' Q' e( l
stro= pmac.value
$ X: C% I* [: A' Istrtemp=''- m3 |8 p, K, w* l0 ?
for c in stro:' o6 x% Q8 o5 w! F. v+ i  K
    strtemp+="{0:02x}".format(ord(c))
. Z1 O$ {2 e! }1 J9 Q: |#print strtemp: O1 F& O% {; K4 s' R; q. \: W
pk.mac=strtemp
  T# J1 O/ F/ t# _" A; {+ {/ f#data to send
' z5 K# Z6 @- c$ |& b8 _7 ysd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
+ i8 i& K7 i, ~: r5 O9 Oprint  'send1 len is 0x%02x' %(len(sd)/2)
* t0 {" V% o- M( r  Y- [( X" bprint sd
! e! i- c' i0 D#pack2
2 }8 Q. ]6 c: ?' cclass pack2:
5 X( q% ]. x9 t. D   pass7 [. |  T3 i6 p, {
pk2=pack2()
2 m4 n/ `4 G  B! @pk2.len='0000006E'9 g) p  o9 E' `, O
pk2.ID='0012'1 w' ^0 U$ ]* d; l+ b
pk2.slnum='00000005'9 e" M0 [" m" ~( m  z7 N4 g
pk2.fatCode='00'8 |, s, }# I3 \3 [6 U
pk2.cardASN='0000000000000000'
8 O- ]" ^9 S  }! Hpk2.cardType='00'. H0 w, F2 t. x! ^  S) K
pk2.userNO= '0000000000000000'
0 A' S4 R$ h5 y* _8 S+ ]( ~2 W( N9 Q1 b4 v, J, t* M' d* j3 @
pk2.fileName1='00000000000000000000000000000015'* c5 o  e% @; R+ x
pk2.dataLen1='00'
- z. {  w2 x  Jpk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'0 n4 B5 Q9 ?+ R, T. K  G5 D4 T
pk2.fileName2='00000000000000000000000000000016'
! e/ K" G- b0 N  bpk2.dataLen2='00'; J5 K( c) |$ G+ N8 s
pk2.dataArea2='000003E800FFFF16'
# T/ d6 b& _' d$ ypk2.mac='06cc571e6d96e12d'
8 c3 Y: t; y$ ?2 A* r' J' Q' e+ f# ?% K. C
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): ?7 n4 z" @$ V' j& Q/ [. j& F" Y

. [% f4 P: L. M/ M; epdata.value=data2
3 j2 u- {* G+ O3 I+ ]#cacl MAC$ `: Q4 q% Z; e$ r; F9 U
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)0 ~9 X1 l* L7 U( e0 J
stro= pmac.value1 g3 Y8 O$ W* \
strtemp=''
" N: @9 f+ s, F+ ~' F. ^for c in stro:
  g( K; G) z  A: k8 ^$ B    strtemp+="{0:02x}".format(ord(c))# `) S' w; Y8 |9 C- T
#print strtemp& ?7 l, \# M3 c4 h5 b! {4 y
pk2.mac=strtemp9 `5 E* r" e. x( x
#data to send
4 P! t6 q; `; g# F; j( Zsd2=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
+ I" o+ k) [0 j1 E! C* e! F5 `3 A2 O& t; G" Q
print  'send2 len is 0x%02x' %(len(sd2)/2)) L2 _/ P* n3 k0 {+ }" @0 q
print sd2. f( t8 O  W9 T! m( G
2 }, o* @6 N/ ~3 U1 G0 r

! {# u+ K  }0 C/ H; d* U; G7 j) Z#PORT="192.168.60.37"  ^$ Y) J6 ~- H
#PORT="localhost"
2 y; t- [7 R) ]9 [HOST, PORT = "192.168.51.28", 5800* @3 h8 d8 W  |! g! n9 w5 C
# Create a socket (SOCK_STREAM means a TCP socket)
/ v) o, C, q% G; p. }4 z2 P. |! Q6 ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  }* `. N7 A) p- L! J. k2 I! y: Y
try:
  ?, V$ ~+ G9 O8 J    # Connect to server and send data
1 e" p$ z) \' s1 ^1 c7 P2 C6 \! z: W    sock.connect((HOST, int(PORT))0 i1 _- X" ^1 s# X7 P
        #data= "123456789"
' Q' o4 @# |* O6 q9 E6 Y* {4 C! T        #s = struct.pack('bbb',1,2,3)1 n  I: N; T& J# E( X: |
    sock.send(sd.decode('hex'))
: w/ V1 F: A0 ^; n- a- b% c    print "Sent1 OK:"7 z, p5 A1 u  u; c( s
    print sd
2 v& B1 ~- N) m4 \    # Receive data from the server and shut down! N" q' w; V. |+ ]9 i
    received = sock.recv(1024)) P  B- j  ^6 j; x! O5 F9 X* F
    print "Received:"1 X& a* _+ U. t& p: F
    print_hex(received)4 N6 J0 x$ _) G( e* K
    print  'received len is 0x%02x' %(len(received))4 w. D# w' Z' l  W( [
    print  'received data analysis...'6 z1 o/ H$ s. n9 c8 g7 w
    re1=received[0:4]
  }6 d' `9 l  I5 @" g    print_hex(re1)
( _6 S8 [% ]. p. @: V8 T& [9 \6 K$ S    re1=received[4:6]
' i% i2 ?2 B6 g  D" p/ }    print_hex(re1)
( |5 \, f$ \1 |( x2 z' P! b    re1=received[6:10]% J( |! n4 k5 G) j
    print_hex(re1)
& [3 C, s4 ~% x% `4 J8 d" _9 u    re1=received[10:16]
1 Z7 \- ^) H. V! [$ ]9 M$ m    print_hex(re1)/ }! b& _/ S9 v( O3 T4 }# z5 x9 E

2 u+ t; h# q+ [% }9 }    #pack2 send
- W' V8 E. U+ Q  n: p9 i! n3 w$ }    sock.send(sd2.decode('hex'))4 p! P9 T% E' `2 o" f) J
    print "Sent2 OK:"+ k+ c* p* A; Q/ k4 u5 V9 y
    print sd26 E/ r. P9 D3 C/ t* `! H. i
    # Receive data from the server and shut down
4 D4 d& o- g$ s    received1 = sock.recv(1024)
& m+ U4 z  W4 G    print "Received1:". _2 \: |& B8 [! d4 b
    print_hex(received1)! b* T$ D$ U  @
    print  'received1 len is 0x%02x' %(len(received1))* l) P& G! V6 ^, X
6 U% M9 `- c1 a+ h# p  T
finally:) s) s( V; y4 r/ A, G4 ^
    sock.close()) N+ Q6 B$ d# b6 Z7 q7 F
* i) [3 V; V0 i+ Q
s=raw_input('press any key to continue...')
. P9 {# |+ s, }
! K2 t" l. ^. @4 ?& o* F
7 j9 R' ~* q* B: ?2 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, 2025-8-22 21:36 , Processed in 0.442244 second(s), 50 queries .

回顶部