QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-
1 A; R8 b/ d% Y; o, P# qimport socket
8 u, y$ J4 e1 h' i7 sfrom myutil import *6 Q: c% e+ R; q& Y
from binascii import unhexlify as unhex. X& y  U8 W7 o; u+ l
from ctypes import *2 `7 z( N4 G( I8 l- X+ w+ ^% E
dll = cdll.LoadLibrary('mydll.dll')
* O# w0 Z+ b* ~+ Y" H4 Xprint 'begin load mydll..'
0 B% Q9 X3 u% U7 }( U#key; q3 N+ F7 H, c5 c6 A* }: u
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
2 D' |4 g6 L+ n5 w6 \* n* c0 y#output MAC
1 T$ q. B9 W! {6 G1 l# c0 @0 Xmac='\x00'*89 u6 D2 ?; R- t+ ?1 ]- ?
data='\x00'*8
: s3 V5 C& m4 s; T7 ~1 P- n$ Ppkey=c_char_p(); S; \/ g* ~3 g: ]: k/ c- `
pdata=c_char_p()( a3 S9 _6 q& A* _, l. s1 Q
pmac=c_char_p()
, V' \9 u% L; p5 \( E8 Y) Bpkey.value=key* D9 o8 Z# z/ j) @
pdata.value=data
- ?6 X3 k: z% E' ]& E5 `9 Jpmac.value=mac3 M' Z0 I; {4 h/ o
#pack1" I, _5 N1 [# W: T; T
class pack:
$ [9 L$ U+ S, h$ ?- u   pass$ P/ a7 K+ u4 W) X
pk=pack()+ y; _: ?( c( q- f( i
pk.len='00000032'3 D6 }6 J" P$ ]0 W# m7 R1 _
pk.ID='0001'
, |0 T, t. [5 s6 [1 rpk.slnum='00000004'
. a, M2 K( y3 E. k! B3 s  }0 Ipk.poscode='123456781234'
! I9 c- O+ w$ I# g- v) cpk.rand='1122334455667788'1 N2 \! e+ b0 `
pk.psam='313233343536', `/ `: ]& G1 u
pk.kind='0000'/ ?( `" @! N5 V; \7 h
pk.ver='000001'! T- e8 s# ~; O1 r. ^
pk.time='20140805135601'; a0 u! E; z8 d8 c$ V# i) z
pk.mac='06cc571e6d96e12d'6 U2 ?( x- {% B: I5 V4 \9 A' ]$ K

2 I6 p# B1 V" F2 `# ldata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)' T% @" {% p' R; f8 G
#print_hex(data)
7 p* r8 b5 s$ m6 v! N# Ypdata.value=data, f2 p; q! l- ^: s4 g
#cacl MAC
2 k2 \! u/ P0 B$ u5 j* `7 z1 o- pdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac), v# x& l1 D$ Y! r5 N. W* a! \: W$ q
stro= pmac.value# M. y1 e0 ~0 r* j2 f
strtemp=''
8 G& \& \! Q+ R# I4 n- Gfor c in stro:+ o- j% g! y3 K7 _+ @$ D
    strtemp+="{0:02x}".format(ord(c))& ~/ e3 t5 [1 r  M- M8 X+ v
#print strtemp& C# H3 k* X( y7 {1 y
pk.mac=strtemp0 e" B/ H. M/ H# l, F
#data to send, K7 _3 o# I0 Y# c
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
7 r; M4 i' R9 Y' B; M. mprint  'send1 len is 0x%02x' %(len(sd)/2)
; w8 d* N, F5 y* L0 V$ R/ wprint sd
$ H, Z+ N# U# _9 T( |# [" R#pack2
) k6 n$ C1 x( G+ |; B; t  ~1 yclass pack2:: K# Q3 y0 L4 q% W9 v4 M
   pass
' I$ s& v0 I* [" b1 Npk2=pack2()' Y7 l  g! y: P) ]- u# \
pk2.len='0000006E'& b3 Z$ h; b0 g" v
pk2.ID='0012'8 ]" H# |- _, C
pk2.slnum='00000005'( g/ \+ ]- x$ X2 X' ?
pk2.fatCode='00'/ U7 ^& V5 {6 t! I; i1 T$ L
pk2.cardASN='0000000000000000'0 k/ P: P1 D9 K4 e6 z
pk2.cardType='00'
6 e+ A: p5 V9 X+ y$ apk2.userNO= '0000000000000000'
: M% n5 \( H5 a  j3 ?' }& D
) t3 l1 ?3 i1 ypk2.fileName1='00000000000000000000000000000015'
- Z: P' |* ?6 S- o, Gpk2.dataLen1='00'
% a3 V8 @3 z/ V1 T* n% W$ d8 j' xpk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
3 a1 L) p8 ], ^4 Zpk2.fileName2='00000000000000000000000000000016'
& D% {5 S$ {4 }pk2.dataLen2='00') y4 v' U$ J' W; f
pk2.dataArea2='000003E800FFFF16'+ `7 q! J4 q4 C* `- N' }0 J
pk2.mac='06cc571e6d96e12d'
$ X+ a( Q. _. @* S) ]# X  H. q" A0 j; ^7 Q4 z
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)
0 M/ d! H+ C! p1 a2 w1 Q
% _( ?5 J; G% Q6 ?. v3 s$ Opdata.value=data2) V$ [, o$ y9 d" G6 [" H
#cacl MAC
0 r) w( G* e4 q" a4 X' Jdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
8 ?' H+ t3 g* A: K, Istro= pmac.value
' }( c1 g& r  E) L) V9 b. dstrtemp=''
3 S2 T$ [; x/ n8 a' Hfor c in stro:5 y/ H  Q* F( Q1 t- u  ]3 {
    strtemp+="{0:02x}".format(ord(c))* N0 |# S9 Z# a; X
#print strtemp. T7 t8 R! u' h' z1 }) s/ V
pk2.mac=strtemp
3 z4 ^; w( z3 W/ y! L' j5 H#data to send
' g* m, a% Y. Z2 T' Ssd2=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
5 D9 T: [) P- @+ f8 Y
/ M1 ]- A1 K! q3 D- c0 l4 V6 L* ]% h# Uprint  'send2 len is 0x%02x' %(len(sd2)/2)
  ~$ u$ r  t2 H; ]# Q( Nprint sd2, L4 [# Y0 E8 Z) U' l- R

0 a" W# p, ]! W, S
1 e9 X3 S1 j8 _# ^: B9 n* ?#PORT="192.168.60.37"
  l% P% V. `3 ^' t( l! @9 \; L2 c#PORT="localhost"
9 j  [8 W2 p/ \3 c6 cHOST, PORT = "192.168.51.28", 5800
, b' A' a, k" h4 M# Create a socket (SOCK_STREAM means a TCP socket)7 Y9 \" R7 D6 B* v$ g8 [
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- Y" N! [3 J" l# r2 Mtry:
8 y) ]. L  n9 @3 J  b& f8 y% H. ~    # Connect to server and send data8 W( n& e. @$ P/ r8 Z% I: m
    sock.connect((HOST, int(PORT))
  r3 r0 k" Q$ w" R) E/ c+ h, f        #data= "123456789"
$ ?( S4 K1 Y6 P3 B% m1 v        #s = struct.pack('bbb',1,2,3)5 G$ N# U/ t' g$ R* `
    sock.send(sd.decode('hex'))! K& W# e+ g! g1 Z- v% S
    print "Sent1 OK:"0 w5 M1 ?8 k& L# Z2 h3 ]
    print sd
0 S4 R+ e5 ^) I    # Receive data from the server and shut down: ~4 k- g7 F1 O0 {6 V* B0 Z5 M6 t
    received = sock.recv(1024), H+ A  b) e) j- o3 l! Y$ }
    print "Received:"3 {, Y! _2 [. U7 I  P
    print_hex(received)) d* \8 Y1 K/ Z; |; o' e# s! q
    print  'received len is 0x%02x' %(len(received))
/ Q* l9 W8 T/ q; @    print  'received data analysis...'1 r6 I8 c. `* q, g
    re1=received[0:4]
! ?, j+ X7 a; r+ f    print_hex(re1)
" Q% T* j8 w% K5 o/ D6 m    re1=received[4:6]0 C2 c- E% x3 f/ `0 @; v
    print_hex(re1)* Z1 [. ]* h# X  o
    re1=received[6:10]
) H  u- c/ C0 |    print_hex(re1)
+ Y/ {* Z6 \% F0 _) x    re1=received[10:16]
1 g2 R( w' a7 D3 Y3 ^2 K    print_hex(re1)
2 K& n. p% d7 w6 l# e1 V* H) z# J! @/ O2 ~: \& O9 M( q* M
    #pack2 send
( O2 R% n& [( r$ ]    sock.send(sd2.decode('hex'))5 \3 ?! x) G8 p; F# T4 P
    print "Sent2 OK:"& w  F3 R  E0 }! h1 Q
    print sd2- A& `' D0 I* n& h' ~6 ^
    # Receive data from the server and shut down! ?( X) i2 b& }% C+ t2 @
    received1 = sock.recv(1024)# f  _* }  \+ Z6 }
    print "Received1:"
7 {% `( e: [$ o) b    print_hex(received1)
, k; _- e3 z, K0 B( F4 j    print  'received1 len is 0x%02x' %(len(received1))
7 k9 i- G2 T4 p+ B8 {
, p0 s% O$ B* h# h3 x' m! D7 C) @, f# jfinally:
5 o7 t* i  g" K# Z; ^. j: q. B    sock.close()  R/ f/ Q7 I3 h* z) c. \

' Y6 w& E7 ^* a' fs=raw_input('press any key to continue...')% T/ E& Y& H/ l" w" u
. ]' P+ D, u* ]! y- v+ K

/ y; L( L; d. P9 E/ U
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-9-1 17:54 , Processed in 0.395008 second(s), 51 queries .

回顶部