QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-
7 u. S5 W! }' c3 J* w( X! rimport socket
* x; \8 U% W- w+ U+ U1 O# M/ cfrom myutil import ** b$ y, j6 N  T1 g3 E* t
from binascii import unhexlify as unhex
6 c, d1 \" R1 E! P0 M) K" yfrom ctypes import *
, F$ ^# ^" j  ?dll = cdll.LoadLibrary('mydll.dll')
- s+ Q  T4 D. p7 Bprint 'begin load mydll..'
& D, W, ]2 [) Q0 ]& u1 [#key
$ }2 y" n5 t. b) n5 Skey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
1 t9 e- E. g, a3 }/ b* J) ~% Y#output MAC
$ C" ]$ j9 L6 z  ?  [( ymac='\x00'*8
. D1 h' L& O0 K, s) K( ^data='\x00'*83 P2 i, G5 W" u( w
pkey=c_char_p()/ e- ^0 {# r! b# Z8 F7 m
pdata=c_char_p()
* F. l8 F9 g1 t. Ipmac=c_char_p()
+ ~0 Y& T$ ?9 u) v" kpkey.value=key
0 Q6 q, ~% g4 S: V: Qpdata.value=data
4 j: j- X; b2 J9 J1 q' F1 d* rpmac.value=mac
) ?* `; M: K3 p/ w. a#pack1
. f" k3 B: q: R2 x* I5 \% ]class pack:% Q0 R- Z! i* z  u* }8 t6 E
   pass
1 U2 Z7 d- j4 D- |5 Wpk=pack()
9 e1 l; a- H. v; P& }3 p& O; Kpk.len='00000032'
9 U  M$ t- ^  L6 i) upk.ID='0001'7 g9 V7 _$ h- c& F' ]" S. t
pk.slnum='00000004'* ^3 _6 Q9 G. o8 @* M! p
pk.poscode='123456781234'
2 R. A9 `; _  D1 P2 `pk.rand='1122334455667788'
/ H& s9 v3 V3 z4 h, H0 M% K& Bpk.psam='313233343536'% u# Z" u* x$ f. r! w4 _9 S* k( [
pk.kind='0000'# S3 a) x7 O' D% P# Q
pk.ver='000001'2 L1 ~. N: Y4 x% h* [3 M4 L& W
pk.time='20140805135601'
% R/ g3 t; i: I9 z( }. dpk.mac='06cc571e6d96e12d'
" C# e0 N0 K9 \5 B" j# I1 a8 Q
/ U1 C# e9 b) tdata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
( b" E- v8 E9 L, g+ x#print_hex(data)
, f+ x: }& g- x( \) N& |pdata.value=data
& [, L% t& A3 @( \  k" V3 w6 d$ j1 z#cacl MAC) B/ r# a/ B; Z5 I: \
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
5 A/ x5 ~0 R/ w) Q- Nstro= pmac.value! |4 W) ]* g3 Q$ W2 B  p
strtemp=''
: m& T) @* P$ h! ~- ifor c in stro:4 G( S: W! x0 O6 X- S
    strtemp+="{0:02x}".format(ord(c))
& X. p! i) N1 j9 h+ v: F2 E+ B. l#print strtemp" Q  C2 S/ @  W
pk.mac=strtemp6 t) T( ^9 k6 Z4 Z7 S
#data to send
- o! h2 v3 Z+ o: j5 {, `sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac" C+ A8 H% p0 x7 \, p+ r
print  'send1 len is 0x%02x' %(len(sd)/2)
% W5 r3 b" X. @print sd6 c: k# ~; u. o# H& v
#pack21 s% d" L' E% O, P+ h7 }
class pack2:
* k; l: D$ S5 O3 m- h2 n   pass  K. ^4 `# U0 p3 b
pk2=pack2()
+ ^5 M1 P, Q8 ~6 upk2.len='0000006E') S+ D9 r% \' j/ h3 N0 v
pk2.ID='0012', x& k1 F5 m+ S3 H
pk2.slnum='00000005'; ^5 ]. X3 I- L+ e% G, Z% f
pk2.fatCode='00'
1 z- B1 P) r# M4 tpk2.cardASN='0000000000000000'6 P: M" J; g: m. }) W
pk2.cardType='00'. h  T- X* P  _+ d0 l( X( C: |3 f
pk2.userNO= '0000000000000000'
2 s  u" E% ^. v7 u, t& k: p: v5 p  Z9 x' M
pk2.fileName1='00000000000000000000000000000015'
& [8 j: D. c+ [) {7 r- t0 s2 |1 \pk2.dataLen1='00'1 H1 c0 a0 h$ K" \; t1 d1 D3 y
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
" {% g" ~) q  _1 p5 g0 Rpk2.fileName2='00000000000000000000000000000016'8 a( r9 Z+ z6 ?3 a7 E
pk2.dataLen2='00'
' ~" V6 [/ ^$ hpk2.dataArea2='000003E800FFFF16'7 k8 b8 `5 n. l
pk2.mac='06cc571e6d96e12d'
+ A8 W: @/ y' L$ R3 b  f- R; ]) O7 H! s/ J
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)
' ]' j7 I1 X( l* n( F5 ~! T! w) N0 r" |$ v% p+ Z7 P4 W
pdata.value=data2
5 F* \  ?5 ]& @3 d4 j#cacl MAC" Q7 Y( r# N  U/ I% \
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
( t% N3 D8 @9 ^) a3 W& e6 }stro= pmac.value
4 _; c5 ]8 Y$ U: fstrtemp=''8 G( L( ], v) B
for c in stro:
0 X( W$ r0 t" p% L5 A: ^1 D    strtemp+="{0:02x}".format(ord(c))
0 O7 f; M$ o: H, m$ t! d#print strtemp- e# p4 J2 z: c9 Q
pk2.mac=strtemp
/ c0 a/ ~, W( d6 a, F1 @, r#data to send
+ Q/ E8 M9 K0 Csd2=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.mac6 y$ Y3 u6 W/ f8 d

/ w3 M0 V6 _" m7 u. I# |print  'send2 len is 0x%02x' %(len(sd2)/2)
8 _: G3 B; i# V& |4 Z& h% Y! @/ O1 uprint sd2
' N2 t0 P2 ~9 ^( F5 R0 f
0 I0 L9 V/ \0 b# j8 q/ S  T; x( D6 B
#PORT="192.168.60.37"8 E* a7 f3 ?9 D- t& b
#PORT="localhost"% X0 G& ^$ I4 H$ g7 m6 U
HOST, PORT = "192.168.51.28", 5800
( a. @: }9 b) V1 d# Create a socket (SOCK_STREAM means a TCP socket)
/ l; @& @0 l/ V. G& k+ ~4 s: ^sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
0 m! L4 R: ]5 j: Z" y( Otry:) ~. N! a: b- v5 L
    # Connect to server and send data
/ T" P8 s. X' K* Y( p$ y    sock.connect((HOST, int(PORT))" G" ^" J, y8 S. i; G
        #data= "123456789"8 r  k! \! D' M% H
        #s = struct.pack('bbb',1,2,3)
# K1 g+ i% p2 X: C# o    sock.send(sd.decode('hex'))
) v/ [( b% n1 ^8 y    print "Sent1 OK:"+ V1 k! S6 Q- T( Q  U3 P
    print sd
, [' {9 D4 j! E4 ?* `% X    # Receive data from the server and shut down) r, @: t7 U/ t% E
    received = sock.recv(1024)
1 Q# S6 c: n! M    print "Received:". {, j4 [+ I& G; ~/ `
    print_hex(received)
* E- C3 D" |! v- B    print  'received len is 0x%02x' %(len(received)), N! }- `1 d+ D9 p7 F9 c; m
    print  'received data analysis...') g- Y8 }3 s$ I" a& H
    re1=received[0:4]
$ V" R. {: D0 A2 Y6 p! h$ L    print_hex(re1)" y1 x  V4 q( h
    re1=received[4:6]
: f" |. D$ E9 _! P    print_hex(re1)
3 i; ]& K+ c. a% k! |8 [* E) K    re1=received[6:10]8 h2 a1 }5 \+ U/ R# h8 e; j
    print_hex(re1)
. b( ~! y- a) I, s1 ?) t! A7 `    re1=received[10:16]
9 o- }3 ]% I5 @) Y: Z4 d' {    print_hex(re1)0 v4 a% J, T5 n1 A- x! j7 z

3 p/ F! D; V: H( p4 o* W* [7 y    #pack2 send
7 n: u% U2 _! p; N( D    sock.send(sd2.decode('hex'))0 r: W6 l% k" P
    print "Sent2 OK:") ~5 k! r. l) e4 @- I
    print sd2
7 h$ {% ]! ?5 x2 P( j! d& l    # Receive data from the server and shut down
- ^; B& ]6 `- Z, t0 w    received1 = sock.recv(1024)) _2 E. v# T% _
    print "Received1:"; d. Z- X! |2 A  {
    print_hex(received1)
  ]; }- L) y" ]    print  'received1 len is 0x%02x' %(len(received1))4 q! d( Z9 w/ `, u9 ?8 G8 `! g
9 I4 r, D# j7 [
finally:
; M9 }/ }# e: q6 [  n( ]    sock.close()7 H( B4 |* Z& O2 E8 f) V
7 h  S1 X5 ~, |3 k2 D4 v$ P
s=raw_input('press any key to continue...')
* \* ]) D5 ^+ A+ N, W1 o' O4 {! Z! l5 j- P) S1 R+ M6 K9 {

7 c7 }3 M( a+ U! E( F* o% c  N. t
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 10:18 , Processed in 0.897018 second(s), 51 queries .

回顶部