QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |正序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-
7 H, M& n3 U/ ^9 o. I) K8 P- ]$ [import socket
/ E  I% `! J( g; F; V) Jfrom myutil import *5 v5 i, E" K1 C+ V5 H. l' ~
from binascii import unhexlify as unhex
$ M+ a* a' C# r7 F; T& vfrom ctypes import *
5 \4 k6 F) u8 y% N4 b2 S  u. q0 Odll = cdll.LoadLibrary('mydll.dll')
! G9 O9 f5 E# i" l1 U# K7 }6 hprint 'begin load mydll..'
9 D/ w5 ?" P0 f" R# p6 B#key
4 I) `0 |) C1 O  B; {key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
- q$ t2 X& ~! D#output MAC5 L) W# J: W5 F& l( y' L5 S8 g
mac='\x00'*8
7 Y3 F; s& h! t+ b  R2 Odata='\x00'*8
1 }8 j. F! o, Q5 v, zpkey=c_char_p()6 s/ r% w+ E# G+ g. T5 z) [, |& Z
pdata=c_char_p()
: r0 R. K. S8 ~( I3 b  Upmac=c_char_p()
6 f  u7 I( d8 z2 C# z. y& {pkey.value=key+ ]8 ]# p# W3 k( H2 Q8 v/ _3 A0 D
pdata.value=data7 p; I! h4 U' j: ^3 k- A0 a2 t; Y! m( J
pmac.value=mac6 O) D2 m$ g. T8 V! ?8 v# a# ]: L
#pack1
) x7 M/ A) [8 W9 eclass pack:
( i6 l5 y, U7 P" P' E0 m2 a; v   pass' \0 ~/ X6 a0 h
pk=pack()
1 s7 m6 m6 |9 A9 d! c% f! p% Npk.len='00000032'$ G) X4 S; X9 `  M' @$ D
pk.ID='0001'
) K6 {/ I/ J3 P; S9 b/ bpk.slnum='00000004'
  x+ |* C7 m( S+ gpk.poscode='123456781234'
& T. h0 f2 \+ s% jpk.rand='1122334455667788') Q" _- T5 D2 ?- }
pk.psam='313233343536'  T& z) p2 h+ H' N
pk.kind='0000'
+ u* R+ F: E/ y6 X6 S- }; q% g" q+ M, ~) [pk.ver='000001'
& E& j' T" }1 F; Y) Bpk.time='20140805135601'
  I+ W/ Z6 R2 W9 w/ t' M1 D! Apk.mac='06cc571e6d96e12d'+ e$ u- O* J  ^( Y

) s/ h! l1 Y/ mdata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
0 x. a! R1 g; c, e" ~#print_hex(data)
5 o$ N* e9 s9 a6 e8 _9 N. a( p- Z; Gpdata.value=data* [/ s+ E" l' I, F2 ?
#cacl MAC
$ G( Y" j8 d! e; B# ?/ U0 u+ Fdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)& n, B2 J" S, x" H- H/ S
stro= pmac.value6 o. u& y& M6 Z) v% g$ j, W+ p
strtemp=''/ o  b" O& K3 N5 M% l' {% r6 r
for c in stro:/ c: ~: A3 E1 I2 R2 V
    strtemp+="{0:02x}".format(ord(c))
# p+ v- z" C, J( {3 N#print strtemp7 W  [& U$ v* u# ]3 S- b
pk.mac=strtemp% R7 @0 Q; [; C' V% s
#data to send
- u2 `: D3 a. e5 F* i/ Z. X7 Msd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac( j$ n+ Q' z: D. a  G$ W* b
print  'send1 len is 0x%02x' %(len(sd)/2)
, Z0 ^5 O) L( {8 N: z/ v. Cprint sd
8 o! y; c  n6 q3 _#pack2% Q/ |) N* Q: I$ r# @
class pack2:  L7 L" O2 u/ f3 D+ G4 S4 C; n
   pass
- e6 V( |# d% Y7 x6 M1 b" spk2=pack2()
" {3 v" T) n8 I1 X' Q: J( {, Gpk2.len='0000006E'
/ v  h- B3 A- X+ kpk2.ID='0012'
/ a( R* r% B2 p; a) Kpk2.slnum='00000005'* V& \# m. H( c6 T2 `+ B  {' ^" W/ {: X
pk2.fatCode='00'1 K+ w4 U1 ~& j+ H" ^; a) k! T
pk2.cardASN='0000000000000000'; R1 j, ~- q* `* D- Z# ?+ X1 y
pk2.cardType='00'1 f/ Q7 L1 R3 z, I, \! |) c
pk2.userNO= '0000000000000000'
# M/ t" b* ^+ T+ C
. x. ]% P4 L" }8 O2 dpk2.fileName1='00000000000000000000000000000015'* V' g7 p8 D/ G# G2 p3 k0 p
pk2.dataLen1='00'
1 J) R0 x' ?  x# L8 W6 Jpk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'- m; i# K7 o5 w$ r3 W# E
pk2.fileName2='00000000000000000000000000000016'
! L+ h9 w5 d. Y( Q: ?: }. hpk2.dataLen2='00', ]* f1 a% ^7 i/ ]3 C$ I
pk2.dataArea2='000003E800FFFF16'
, t% M5 N2 m8 V& J( jpk2.mac='06cc571e6d96e12d'7 F) D2 i7 d. H& J4 `
% V; i- R/ h* a. G5 B4 I' }4 N
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)2 _1 ?; v# C$ Q
" i  u2 M1 q8 m" D
pdata.value=data2( f9 Q8 Q5 V2 `- @7 U: L
#cacl MAC9 V, v# d2 ?* @2 W
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac): z' L' o7 ~' o5 ^
stro= pmac.value
5 ^1 p, M9 M7 m/ A. Jstrtemp=''6 d' p4 Q* t" z5 B( I9 c
for c in stro:  X5 w( T$ ?8 o  V  r
    strtemp+="{0:02x}".format(ord(c))
# w6 D5 Q$ d  V  Z" J7 b1 b5 t$ J- ]#print strtemp$ A8 r- Z7 H3 Z$ ^$ S& ^
pk2.mac=strtemp
2 N6 H' d. w" \5 N8 Q. S" Q( K#data to send
0 x- M& d" U3 T% w. rsd2=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: u5 P% }% ?1 s% v
& m) U5 _  G8 z5 R" y$ b" L
print  'send2 len is 0x%02x' %(len(sd2)/2); Y$ h" v9 E1 j; A
print sd2
3 [/ m$ |" n1 c( F4 U8 t3 G9 j  O' k+ S: x( a/ D

5 x/ D$ C3 w& F* o0 C#PORT="192.168.60.37"
' s/ |0 o$ n8 Q9 K) ]/ o+ T#PORT="localhost"
- D5 G) K7 `* G$ o0 rHOST, PORT = "192.168.51.28", 5800* n  }9 U9 `2 m  k
# Create a socket (SOCK_STREAM means a TCP socket)$ I  Q$ ?( r5 v& X  D4 L
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
. a) d1 e. ]2 r# r! atry:4 u" n' b6 P7 g4 A$ G( [1 ?
    # Connect to server and send data0 m$ ]' N2 h! \5 J) A
    sock.connect((HOST, int(PORT))0 e- z8 ~% n8 j0 p- i  E$ `
        #data= "123456789", n8 k- Y( B8 a
        #s = struct.pack('bbb',1,2,3)1 m( f) s$ L6 |7 E( T( g) ^
    sock.send(sd.decode('hex'))
& Z) b4 i9 x. r* Y9 c    print "Sent1 OK:"
8 l  e4 }  S% T  V  z    print sd) c6 U1 `4 q9 O8 r* b# s% j* C
    # Receive data from the server and shut down
+ c5 t0 r8 p: c& }" \    received = sock.recv(1024)
* F8 e) b- d# L- O, x  x( S    print "Received:"( D( C: P5 g% u* k& {5 `
    print_hex(received), b3 [! [8 X' A
    print  'received len is 0x%02x' %(len(received))
7 @+ c4 G* ~9 @% d0 @6 |7 y1 j    print  'received data analysis...'8 q% W) F+ r& q  r9 ]
    re1=received[0:4]
, p) g2 y" d5 B( v' @# n    print_hex(re1)
3 A. a: s1 S; Q/ a2 D7 {, X' h    re1=received[4:6]
- j* N( Y4 T1 X: G/ C    print_hex(re1)7 g; Q/ L3 A# y& }) s: z, i
    re1=received[6:10]
# q+ i" r( X* N0 u3 u8 y    print_hex(re1)
. I  C( G- R8 \4 I! ?% x; C$ K    re1=received[10:16]
! l/ D& k- U# {" n& d  `& g# j0 i8 {8 [    print_hex(re1)" p/ c, i, S6 s0 A2 D/ a

+ Z+ I5 K9 e' a$ I  P6 V    #pack2 send
$ B1 d' s2 `$ D, Z    sock.send(sd2.decode('hex'))
# o5 x  Z0 A# o' [( v6 c6 o8 a( X    print "Sent2 OK:"
5 \1 d' F8 q! h7 k. X, \( q; X    print sd2; v0 T/ E! b( M( d6 |. c; x! C
    # Receive data from the server and shut down- \* _: D0 l& D, R# e6 J( H/ M. d
    received1 = sock.recv(1024)+ Y: J) P- K  p* Q2 d
    print "Received1:". q7 Q/ Q4 p- j, O. e& V: S
    print_hex(received1)8 u2 Y7 R, |. W6 @; L0 T
    print  'received1 len is 0x%02x' %(len(received1))  J* x" x  U5 [: F! N6 e
- u  y) B4 J* z. N2 V* x: V
finally:( A$ H' _" s; @7 c% p) y  [
    sock.close()
  k2 e  ~& h  T$ f2 B; a7 Y$ G
s=raw_input('press any key to continue...')
+ p: e! V% ~0 _8 I0 B6 D
$ i, Z3 E! e/ v  b. I" I- d
8 m  _8 l! X0 n
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-7-18 12:15 , Processed in 0.323046 second(s), 51 queries .

回顶部