QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |正序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-/ w% L% @* M7 p2 ~, z
import socket
' m0 @2 u3 j, x! N. tfrom myutil import *% w3 X0 ^8 v7 i% l' r0 N
from binascii import unhexlify as unhex; U7 ?' O' f% \( ]( d5 i! n
from ctypes import *! b* I4 p8 l' Y# a6 ?' D4 E7 f2 }/ l* S
dll = cdll.LoadLibrary('mydll.dll')
3 w% N( T- K/ j# ]3 _9 c# Zprint 'begin load mydll..'
6 \. ^# U9 d6 [8 I0 A) q4 P$ C#key
& _) J% p- \6 e* dkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'; r; n1 x& I" g3 M
#output MAC
" G0 j; g- Y2 w  y9 J) zmac='\x00'*8
8 i9 D. [0 t5 p* F+ A1 Wdata='\x00'*8+ ~5 N1 H. M1 F* s' g
pkey=c_char_p(); @2 x# W  G! }) d" |
pdata=c_char_p()2 W9 H- u, K3 A. s2 t
pmac=c_char_p()
6 a& e* s2 R1 {' T* m  L  c5 upkey.value=key
2 H7 s% U9 Q1 w/ Epdata.value=data
1 j5 p# N, N" mpmac.value=mac
& m2 _6 r7 g* O2 E9 \0 n$ \6 `% R/ j' a# k#pack11 B5 i1 A! A/ X5 ]
class pack:5 c! V; z! J, |( A$ y$ f# N5 @. g
   pass
, E# Q1 X, V' N  fpk=pack()) C/ N9 _" a! w
pk.len='00000032'
6 \; v  T: s" S3 Y$ ]' r! w. apk.ID='0001'. b( s0 n" A" `$ r6 S0 i5 H" T
pk.slnum='00000004'* {1 F' n! G. |( @  x
pk.poscode='123456781234'
" x- m/ \# D; d* k- V  j7 m1 @2 npk.rand='1122334455667788'
+ C- c* }/ D% k9 `pk.psam='313233343536'
& V# n; e! Y3 }- S0 [pk.kind='0000'6 E; X1 U/ [6 m5 M1 ~, E
pk.ver='000001'0 b& J, Y6 S% q& V3 \' f- K+ R
pk.time='20140805135601'
7 K2 t2 O9 Q. c; b3 p7 q! G; K% xpk.mac='06cc571e6d96e12d'
6 I# ~+ S9 j% Y1 V4 h
: {$ u% _) ?$ L# ^( qdata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
6 G' P  Z( P- E2 n' o* m: Y" J#print_hex(data)& Q* d6 W* U' \* B& b/ Z5 o3 w
pdata.value=data
) W. Y; B+ t5 S9 h' t#cacl MAC
- w. q# @8 v1 c: b) y& j1 Jdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
7 T8 \) p1 Z$ e* O' ustro= pmac.value
" q% I9 q& H4 I5 o% }1 estrtemp=''
; s4 e& s5 k0 K; F, C, y2 Efor c in stro:
  e  X2 p! v5 N    strtemp+="{0:02x}".format(ord(c)); [- v2 ^* F, p8 Z+ p  H) j
#print strtemp
7 _! Q3 F$ o6 C% Wpk.mac=strtemp
% f! `! v9 N' q1 B+ r9 G7 w#data to send9 X3 ~0 B( k1 ^* q
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac) n6 o  Z; F7 }  h0 G2 Y0 n
print  'send1 len is 0x%02x' %(len(sd)/2)
( `9 P& b6 ^6 W  Hprint sd: D4 T* g! _  y: X" F5 _2 A
#pack2$ G5 u2 @# V: b( T: y* F% [& K
class pack2:& Y. C% y& o/ ~% }) B
   pass6 p7 l" f3 h1 f2 H5 c
pk2=pack2()
/ y5 U& c/ |  Jpk2.len='0000006E'0 a6 @& s' y, Q/ h' f/ g5 ?
pk2.ID='0012'
- |# d+ z  k5 d" w- Gpk2.slnum='00000005'
$ C/ r9 `# x) P+ r7 H8 N3 V7 s: b; g/ i6 apk2.fatCode='00'8 m8 s, U) ?& t8 N
pk2.cardASN='0000000000000000'
6 o& p/ s& r& o6 ^$ f) H5 v/ Zpk2.cardType='00'& z0 f% a4 t" R! G' P$ y
pk2.userNO= '0000000000000000'1 S0 ^/ v$ n3 Z3 |* @! E  S
( U4 C+ h* [5 T" f0 e: Q3 }* l
pk2.fileName1='00000000000000000000000000000015'0 w$ ]6 `  W! d5 h2 x; d
pk2.dataLen1='00'
& ?0 e' K3 r4 @9 Z; epk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
9 D6 c4 i* Z$ ?4 P6 z$ Fpk2.fileName2='00000000000000000000000000000016') u" e" i: U( ^+ u/ X
pk2.dataLen2='00'
9 E7 b  G7 E4 |# q& G' Cpk2.dataArea2='000003E800FFFF16'' t, x9 X* L/ e  }+ s
pk2.mac='06cc571e6d96e12d'
" L/ o+ G( q( ]2 F" G
! G5 T7 g: l9 o+ 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)6 f5 C4 O; H' @( J, u. ]& @

0 V% t9 j4 m1 r- u7 @/ M8 G; ppdata.value=data2
1 W1 p* ~0 M4 u% \" J( I  l2 K#cacl MAC
' L; m  w* E9 D, L# H* W  B4 adll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)" n- c3 d$ Y5 _! D8 P) {' ^# u
stro= pmac.value
2 e0 s8 v3 t+ u% P) cstrtemp=''
$ [% A: `, Y5 O3 v- p* nfor c in stro:0 P5 w3 O$ t" d: O1 I
    strtemp+="{0:02x}".format(ord(c))# w/ k' v: x  k6 U' R' @
#print strtemp0 j. s) ^: H) A9 p
pk2.mac=strtemp
* G6 b  W9 D- B5 d, Y& m#data to send/ S( G2 w. w5 I" s" F
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
  N/ o3 N9 E$ _
" G8 V+ G+ q/ Wprint  'send2 len is 0x%02x' %(len(sd2)/2)* e4 q$ W. U2 c; V0 H- D7 r
print sd2
2 x3 q0 x0 D, Q. j% F/ o# V0 o1 b) L% ~
! b( O" o9 D$ G& w5 B; y; F$ W
#PORT="192.168.60.37"9 |& v) v& S0 Z; x+ k5 X
#PORT="localhost"
. k1 ^, t" g& F% I% \HOST, PORT = "192.168.51.28", 5800
8 ?' h2 [- Q  H# z8 \% @; g9 f# Create a socket (SOCK_STREAM means a TCP socket)
3 B, ^4 d9 o( [sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)* V/ J; S) r+ T& W  `# n% \
try:
4 A/ C* `. k4 q* G5 \    # Connect to server and send data
$ q) s9 E) [( \    sock.connect((HOST, int(PORT))
! E  f. t! J1 e: P6 }7 K. A        #data= "123456789"
  k5 x' o* T! L5 J" U        #s = struct.pack('bbb',1,2,3)
/ u- i$ D2 w6 U& L" l9 I% O    sock.send(sd.decode('hex'))8 c5 I6 U7 N) t( z
    print "Sent1 OK:"# F2 m9 N% a3 @, x2 R! v0 F) h
    print sd
; M/ P: E' m) g) _; e  r. ~) }+ g    # Receive data from the server and shut down& w# f. g' `% S6 _! V- k' \
    received = sock.recv(1024)2 B, b; R3 h% S
    print "Received:"
( r- H8 m( L5 {, {    print_hex(received): L' e% F* q/ l7 s% R
    print  'received len is 0x%02x' %(len(received))/ O9 b8 a+ ]: X, k1 z$ N
    print  'received data analysis...'
! {+ S1 u! T9 W% y    re1=received[0:4]
1 y! A# g% Z5 U9 o/ _( C. H% Z    print_hex(re1)1 u! B: L% _2 Z, c. B
    re1=received[4:6]$ b0 k9 w) S% [. W
    print_hex(re1)
9 T6 E& X! {5 Y1 [: O    re1=received[6:10]
# n  t: [8 M0 H* {$ e  S) e    print_hex(re1)
) }" M/ G" \7 F- |    re1=received[10:16]1 I8 ?( D2 n- S
    print_hex(re1)7 V" m4 k  c* t+ u* D
& w, u" ^, \0 m" }
    #pack2 send5 f/ [; W) M3 I
    sock.send(sd2.decode('hex'))
6 }2 A: _, f0 ~! u    print "Sent2 OK:"
9 V3 `; |* X, G! e    print sd2: m' V+ g+ O- `6 v% {2 p
    # Receive data from the server and shut down
0 w4 h' P+ X7 e    received1 = sock.recv(1024)
) n* H0 h! L& ?6 f  L' D4 V    print "Received1:"
: V8 [+ j, {( S7 Z    print_hex(received1)# K# L0 ?* D- j$ m9 u
    print  'received1 len is 0x%02x' %(len(received1))
- Q' B* z" B3 i1 s$ h7 `+ ?7 s7 L. C; j$ A5 u) e! V
finally:
7 S1 v+ F% A0 y; ^1 V$ X    sock.close()
* a; {7 k% A: O3 Y9 K, J5 X
( f4 u  A+ m9 u" Es=raw_input('press any key to continue...')
' e- a& S  }' {8 Y: ~$ L) R# R( H2 F! p* D% C
/ q- F8 ^3 C3 Y, S9 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-4-20 02:01 , Processed in 0.422315 second(s), 52 queries .

回顶部