QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-
5 |& C  f+ H$ L# m1 timport socket9 P% u  D! v$ `1 R
from myutil import *
7 S+ f# ^" o6 ^  vfrom binascii import unhexlify as unhex! {! m; E8 L7 ^4 o' W& ~
from ctypes import *# e% B2 R: E6 u. m$ N
dll = cdll.LoadLibrary('mydll.dll')  l/ u& S, }, Q* ?- f
print 'begin load mydll..'; b0 `" A; f) Q
#key
/ ?& y) s! a3 _$ ^9 G6 q& tkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
! j) C: k# O3 A* o6 O9 Z$ K+ k#output MAC! t/ s$ V2 k8 h' R, E0 u
mac='\x00'*8/ p% ]; h1 c; j  {. x' ~
data='\x00'*8' o* K7 ?4 g- @$ ^: Z
pkey=c_char_p()# M- T/ j7 l. d
pdata=c_char_p()
2 u" E. J+ p- \! K. Z( O  wpmac=c_char_p()" u( F8 h+ O* I) z
pkey.value=key2 r$ `. K3 y, D( Z9 H& D) _% C
pdata.value=data8 \+ V0 ]2 ]: M% d8 e" j1 n
pmac.value=mac
' a. G' }* T0 L  r#pack19 U" o6 w8 C0 [7 {! x, ]1 [
class pack:% W0 @4 O# v+ w, F5 i
   pass8 g# B& x: ?6 }/ Z. a, M
pk=pack(), @. a# ]" h( E" G
pk.len='00000032': Q; N0 M( l& Q
pk.ID='0001'
8 ^2 H! b! I6 u2 _4 }/ Hpk.slnum='00000004'# T% m7 I# U# N6 Q
pk.poscode='123456781234'
  u' l& r0 [" J: [' M9 \3 Ypk.rand='1122334455667788') j; s/ t2 }- k& Y. c5 _
pk.psam='313233343536'
$ d4 Y! M& A) t6 g* j" |$ M5 ypk.kind='0000'0 C; E5 G8 y! N* ~! m, y2 M0 A7 j
pk.ver='000001'
$ ~- B8 P$ C8 i  [( y' [+ ~pk.time='20140805135601'
6 Q  E7 U; L$ o, t, Opk.mac='06cc571e6d96e12d'- ]8 }+ G" J6 F0 F
8 o/ U8 s/ E3 s
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
& s8 u% R/ ^! T, C#print_hex(data)" x- M8 @0 ]% G  T* Z
pdata.value=data7 ^, q. }* u: e0 m0 g& b8 ?
#cacl MAC
, X( B! {5 _2 x& L* `dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
; b2 i3 h/ H1 g( J8 Pstro= pmac.value
/ x  y. b: d/ u0 s+ {strtemp=''
8 s7 `0 O# I& J4 H5 Z9 Q: _for c in stro:- z4 q' W7 e  l
    strtemp+="{0:02x}".format(ord(c))
4 B3 d9 o& p: p. v$ d#print strtemp
& Q* H7 ~( n2 k+ w2 o: [6 R, @pk.mac=strtemp
+ ]/ w# a5 U7 m* V2 D4 J. z#data to send! Q" T% X( o& k
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
4 o6 I; k. u3 @& \% tprint  'send1 len is 0x%02x' %(len(sd)/2)1 S. K+ N7 M+ A' q' J. j  D
print sd
, Q3 V( T' {' v" p# g. ^8 |#pack23 }5 ]- h  `3 Z1 \# Y
class pack2:
+ C: Z8 ~* }8 T. m# w   pass; j9 `/ f& i/ t, P! o- `$ y
pk2=pack2()# K4 R+ w7 r& S3 ~1 k! r9 s
pk2.len='0000006E'  q% B3 q% e7 P
pk2.ID='0012'
4 L0 ?( H& W5 Y6 z" a- v9 E& f4 q$ t' x( ypk2.slnum='00000005'' L- }* ?5 N8 a) D
pk2.fatCode='00', T% S! R1 k8 P( u' W0 |
pk2.cardASN='0000000000000000'7 j; [: z2 I4 B- V: F
pk2.cardType='00'; j1 g+ s0 g. I2 A& y- A3 [
pk2.userNO= '0000000000000000'
5 L* T- m7 s# |8 U
; ]& A5 \' X$ H( ?pk2.fileName1='00000000000000000000000000000015'* f% ~7 f6 y0 {6 k7 v+ o+ B
pk2.dataLen1='00'
2 ?& \: t- t5 b8 B4 tpk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'0 D2 D" ^2 H% s
pk2.fileName2='00000000000000000000000000000016'
  W, ]/ W( n5 O6 D) Fpk2.dataLen2='00'
4 w7 n7 a% q# E0 m/ Upk2.dataArea2='000003E800FFFF16'- E5 P8 \3 A! U" _. F3 a
pk2.mac='06cc571e6d96e12d'9 F; T: U- ?2 h, k* P0 X7 |+ {
" G" r! U- S; L3 r# u; P
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)
' O9 Z* l& W  z, f; l! r
5 ?/ I' ^2 O' e9 a! Rpdata.value=data2
+ Y# a6 \; f. [2 R8 V#cacl MAC7 p% P  d1 `8 U& T! _, L' i
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
+ q; @# p3 }' o! a) w9 cstro= pmac.value6 f' H3 Q' p5 a$ d
strtemp='', {2 ]3 V- t: V$ y+ Y6 u
for c in stro:8 _- t, I, K9 V- W3 P
    strtemp+="{0:02x}".format(ord(c))
) ?/ l8 l6 a* m: @#print strtemp6 z* l' Z+ C4 `5 Q
pk2.mac=strtemp
/ ^. ?1 i) s$ ?. d( N. D/ P#data to send
+ c1 Z/ U8 [. X+ N" A( w- qsd2=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.mac5 J, c" m$ s1 T" s# V) B) n: G

% k: N  y1 p% X0 F+ Iprint  'send2 len is 0x%02x' %(len(sd2)/2)
8 U0 _9 k; h) R) w, |' A! Uprint sd2; Q4 U- e& \5 @# t

$ a% u7 p9 b) h! o+ n1 H; y7 x  a% S$ V
#PORT="192.168.60.37"$ e" p. }' J* R$ ~% b! k' Q9 x
#PORT="localhost"
. l; {% C) `5 A9 v4 ^; aHOST, PORT = "192.168.51.28", 5800
8 H* J8 e5 d+ u* E; I  R. X# Create a socket (SOCK_STREAM means a TCP socket)9 ^% ^6 w0 t6 }7 L6 C2 Q5 `
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)( \1 U  v9 V2 S& Q9 W  u7 D
try:
% u6 B5 m! I( h3 C    # Connect to server and send data6 `* \. m! Z4 |% T0 E
    sock.connect((HOST, int(PORT))
/ p8 m( \5 E1 ~        #data= "123456789"2 O3 K5 h: @5 q$ J* l# E
        #s = struct.pack('bbb',1,2,3)2 F- g0 M" W' ?; b' v
    sock.send(sd.decode('hex'))- [2 A5 ]) T4 f/ V. r4 \* z- M
    print "Sent1 OK:"
; K1 V: t/ ]6 K2 J    print sd% g, C, e  j, B1 h3 u2 l$ R, O
    # Receive data from the server and shut down" D, L/ E. R& X3 g% a
    received = sock.recv(1024)" Y: X( q2 Y* M0 h
    print "Received:"
/ L5 g+ |1 `" B  |9 `    print_hex(received)
  N5 H, F3 N2 j) M  `    print  'received len is 0x%02x' %(len(received))4 `1 o& O) t; j% Q6 d* H
    print  'received data analysis...'
' A. [) _, ]  H6 X+ G3 u5 S# B8 X    re1=received[0:4]9 P7 w  w9 m( M& J1 w/ m5 Z
    print_hex(re1)
. ]5 Q5 d& H7 y0 e- R, s+ w    re1=received[4:6]9 J$ \' R8 D* A& I: y* H
    print_hex(re1)( c! X9 L9 p5 H/ g  h" H- K
    re1=received[6:10]( p/ T8 B) w3 Q4 \( a; }+ D
    print_hex(re1)6 d" n; i5 `4 [
    re1=received[10:16]3 Z  T# j0 c2 d$ @* J! B
    print_hex(re1)3 O+ J6 k6 Z: W) M3 ^
8 F. a8 O; ?" `3 q. `, u1 Z
    #pack2 send  \/ G6 s  u- m( t8 H
    sock.send(sd2.decode('hex'))3 ^( o- D4 x& v, `3 A
    print "Sent2 OK:"/ S2 P& T" B' U. j& D5 X0 V4 X
    print sd2: c* Y' l4 A- r5 f) K$ U- j# E
    # Receive data from the server and shut down" q4 J' Q4 k& z/ h- T& I$ G7 D
    received1 = sock.recv(1024)
# Z( {0 O7 B4 [$ V5 @6 A    print "Received1:"
7 B, j) h( H# f( M! T4 f) V    print_hex(received1): U1 Y% {: n% |6 H/ S8 \0 q
    print  'received1 len is 0x%02x' %(len(received1))+ K- p* c2 Z- {! ?6 l' R. I3 B
1 L/ b1 c5 B$ @6 Y5 @: q
finally:
) h2 |) D) c0 b" z7 w7 y9 ^  p  Q    sock.close()) [# c+ G& X  `
( x: M# o( X) O4 p6 P- j5 C
s=raw_input('press any key to continue...')
5 k3 `( K5 r& z5 ~, A9 x! c/ ~4 Q8 P3 H# }6 q
1 p% V4 c& E. `# k; b& b
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-19 05:37 , Processed in 0.419614 second(s), 50 queries .

回顶部