QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |正序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-! C" `, V8 o6 z& B+ C
import socket
( N( C. n* R: g8 zfrom myutil import *
% X* R' G& J; L- U. n+ ?0 xfrom binascii import unhexlify as unhex2 [- D# j5 c5 f  |- C4 i
from ctypes import *
3 V# H! ~. |4 G5 C5 o* [8 B5 fdll = cdll.LoadLibrary('mydll.dll')
8 a) }, s; I% Sprint 'begin load mydll..') P: w* |; y' s
#key# s) w: h1 o- `/ |% H  F, N! S: x
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'/ g1 n0 e8 v" J; N( ]' N* X0 K( A
#output MAC
$ u0 P2 J- j* x/ Ymac='\x00'*8
- ]9 H& m' [4 jdata='\x00'*8
$ S4 I, Y' _. f! K5 e5 dpkey=c_char_p()9 f2 j4 u, Z, N$ ]; p# j2 R
pdata=c_char_p()
+ p- h9 O/ G0 d# A+ h+ t( qpmac=c_char_p()) J2 @; J# L1 i. c/ F7 l/ H
pkey.value=key
# I4 r! P1 x- W/ v/ n. s( |pdata.value=data
4 A7 N9 q' t) q) x% o* `pmac.value=mac
% n' ^, d0 v0 `0 }" E#pack1- p- r2 [$ K" ~. U8 @5 s
class pack:
; T& y+ h6 w6 j8 z4 o, w" \   pass
" p& T2 ?; |2 S# @$ g/ @2 `8 ], Ppk=pack()
4 Y+ }5 D. S( {7 }$ g7 wpk.len='00000032'
! w/ n0 s6 J; N; [pk.ID='0001', G' \! h( q$ Z# b! h
pk.slnum='00000004'
% ^( ?8 w  o$ [0 J# @1 J2 Rpk.poscode='123456781234'
7 z2 K' b; b- w' l( Spk.rand='1122334455667788'
. y: v" L! U" G4 D2 Jpk.psam='313233343536'/ W' u1 n! l9 G1 G
pk.kind='0000'
. l* \# T$ b6 ^pk.ver='000001'# C3 Y0 G3 l" m, ?
pk.time='20140805135601'; M3 }3 W' ~; X4 F1 v, X
pk.mac='06cc571e6d96e12d'& @7 b& W5 V! A, z1 ]: U, a6 ]; S, \+ e
( |, e/ ]" \2 `  U: M+ @
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)2 Z5 I0 I3 g/ n0 q% a
#print_hex(data)
, ]. p8 c2 r6 bpdata.value=data3 `2 P5 a4 T) s" @+ s
#cacl MAC' ]% ~! h) ?5 {( x) t+ _) d
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)% s' m& X. Z& H+ b6 E
stro= pmac.value2 m% y1 i% M. W
strtemp=''( L5 l+ r% C- L( c' Z2 F" R, p
for c in stro:7 |" ]( l6 w( P, A7 \+ \# c! n
    strtemp+="{0:02x}".format(ord(c))6 m) x* v! [: e& R5 K9 [( @
#print strtemp' D  r. r" M6 B
pk.mac=strtemp' ?" Y3 L, M( L1 c9 R6 P! K) X9 g: C$ T
#data to send
( [0 E9 C' a6 I' E, Usd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac$ }4 N3 _1 m- z8 d9 w& x* f
print  'send1 len is 0x%02x' %(len(sd)/2)
$ A( \7 x" J! G2 y( Dprint sd
5 }/ @0 z! R0 K2 u% Q2 o5 r3 Y: ]2 V#pack2& P6 A- p+ o: t/ W$ S3 g! h
class pack2:
2 z3 f  D8 g) @/ |7 A$ g8 x   pass/ g7 |$ V3 V3 G8 W/ P
pk2=pack2()3 D' `$ p3 }& P- A$ z7 N3 p
pk2.len='0000006E'% R/ q1 O9 P4 x% ?3 S
pk2.ID='0012'
+ Q; V4 D/ k% h9 ~. o% P! K: Kpk2.slnum='00000005'5 d. s) }" q' P7 z2 ]
pk2.fatCode='00'- |6 M. t9 w( A; S9 m% ?
pk2.cardASN='0000000000000000'
2 I0 x/ O& }  z3 {5 Spk2.cardType='00'0 p5 U! N; z& @6 C- ?; D& s
pk2.userNO= '0000000000000000': z. s4 z0 [$ m* |5 Q# e% T
. F! C* ~4 S9 F- `0 W
pk2.fileName1='00000000000000000000000000000015'5 O! e  F) q9 }
pk2.dataLen1='00': L$ V, r, c, z) K
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
- {9 R7 ^2 L/ S; jpk2.fileName2='00000000000000000000000000000016'( p# M" V$ X6 F4 R. z0 h
pk2.dataLen2='00'3 w, s- c8 m/ N! K0 [5 t/ j0 o
pk2.dataArea2='000003E800FFFF16'
: J8 w2 i  c( f9 Y% w' @9 Hpk2.mac='06cc571e6d96e12d'
7 p% T1 @  k# T( B/ {% B2 p8 s) A/ B6 W, d4 ]) @, [
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): i8 q) m7 A4 ^2 _; a' x3 n. J& C

0 x1 t7 K" p( ]pdata.value=data2
5 e+ ]; Y& @0 A; G7 t8 _#cacl MAC
# V( k8 R6 Q- T6 \dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
3 ]2 i  z( t" P; _7 Y4 c* Xstro= pmac.value
) L6 I" q1 d' W( nstrtemp=''
/ y+ W- J- P0 I' N& g- Vfor c in stro:3 H, I" d8 T$ b3 X( Y
    strtemp+="{0:02x}".format(ord(c))
0 z  u1 }3 e: z* y#print strtemp  J# S* [2 z; U; j6 W8 M) n  y
pk2.mac=strtemp1 O2 k4 @4 c) C+ x3 C+ w% N
#data to send" r( ^* \) O* ?* m! e) t
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! f) R, ~+ t/ B( t" n) S7 l

6 X5 z) k0 W0 r2 jprint  'send2 len is 0x%02x' %(len(sd2)/2)1 E7 q+ k' j" ]! B
print sd21 o: Q+ T. \; q
8 Y- s8 H- I8 F8 w3 t5 ]

: H7 F9 R- g& p#PORT="192.168.60.37"" a: P3 o' E9 T0 Q
#PORT="localhost"* Z+ H  b; i# y1 X  ~, j
HOST, PORT = "192.168.51.28", 5800
$ F5 ?0 L4 b1 y; ]9 N# Create a socket (SOCK_STREAM means a TCP socket)& w# T, S5 p5 E/ x
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)- o7 G: N$ M/ u9 S( S+ u
try:
% K3 s0 I% ^  s: b0 Z9 ^    # Connect to server and send data' \9 d* m7 ^4 l! r, W& |  U8 `4 ?
    sock.connect((HOST, int(PORT))
% h0 X5 x1 Z3 M+ T2 T% ^        #data= "123456789"
/ o$ r" P1 {1 Y        #s = struct.pack('bbb',1,2,3)& z( t& V5 P$ c# k6 @( u  B! R
    sock.send(sd.decode('hex'))- h+ i2 L+ }6 Z2 J9 `7 g- j
    print "Sent1 OK:"/ r$ @3 e% b7 T' V
    print sd
) }* f! A( N* i% |6 ]* @2 Z    # Receive data from the server and shut down
2 _6 \& O3 V2 J+ m+ V, A  S- ^    received = sock.recv(1024)
" W4 [5 C. ^6 W* _7 }% U, w    print "Received:"0 G2 I9 P" ~* D4 R+ [; `: r
    print_hex(received)
3 Y% @3 v( o" c; W    print  'received len is 0x%02x' %(len(received))# `4 W: ^2 n9 ^# g' O
    print  'received data analysis...'- [: J/ {) S8 \' _! X0 Y% L% z
    re1=received[0:4]
2 [- S2 j, z# X. P5 [* V    print_hex(re1)
, \8 M( D- L0 {6 D+ g6 s    re1=received[4:6]7 n* c7 P( L: m5 O3 N6 N
    print_hex(re1)7 z5 A, F9 }1 R; m. x3 _
    re1=received[6:10]
, B" ~& R" G: m    print_hex(re1); z; K9 P. u' R) A
    re1=received[10:16]7 w% a$ u/ X" ]8 b; ]
    print_hex(re1)6 e& k, S; F4 K6 j

' T* a2 k, K4 C- I4 k  L    #pack2 send
9 h! Y' `! ~3 w8 Y! i    sock.send(sd2.decode('hex'))  y  e  a8 F  k4 f
    print "Sent2 OK:"
2 s& \2 Q+ G9 @# R% h7 r5 q/ A: z    print sd2
" j: A, |( [: u: w  l; j    # Receive data from the server and shut down/ R" _  G2 ^$ w1 b3 d
    received1 = sock.recv(1024). R0 R7 K7 ^' q; [8 V
    print "Received1:"
& Y- |2 d: n  C    print_hex(received1)
  @1 u8 Y; k1 G7 h! E6 j    print  'received1 len is 0x%02x' %(len(received1))
# k& ?5 T0 j- N4 e& p, L  B$ R; W4 {0 m  U9 Y
finally:
" [; U) _! @/ q( L- {; u    sock.close(): b2 v0 G8 G; |# y

* I+ ]  p) u* }) A& j$ {" }s=raw_input('press any key to continue...')# O/ P5 D" Z6 M$ m1 l* Q" n
, g4 V% J' I* Y: Y0 `; S& v3 Q" I
% P  @9 N) L& A( W) t5 n1 ~. A8 f" |- d
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-2 01:29 , Processed in 0.493457 second(s), 51 queries .

回顶部