8583报文MAC验证实现过程

POS终端在与POS中心进行数据交易之前,需要生产MAC(报文鉴别码),这样POS中心在收到POS终端报文后,可以对报文也进行MAC认证,保证报文的正确性。

这篇文章主要讲解如何利用报文数据生成MAC。主要有以下步骤:(本次主要采用单倍长DES加解密算法)


1.通过解析向POS中心签到后返回的报文中的62域获得MAC的工作密钥的密文skey。


2.利用后台和POS终端规定好的密钥解密,得到MAC的工作密钥明文mkey。


3.将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MACELEMEMENT BLOCK MAB)。MAB=M1M2M3M4M5M6....Mn

其中:       

M1 = MS11 MS12MS13 MS14 MS15 MS16 MS17 MS18

M2 = MS21 MS22MS23 MS24 MS25 MS26 MS27 MS28

M3 = MS31 MS32MS33 MS34 MS35 MS36 MS37 MS38

M4 = MS41 MS42MS43 MS44 MS45 MS46 MS47 MS48

如果最后一个Mn不足8位,需要补0.例如

Mn = MSn1 MSn2 MSn3 MSn4 MSn5 MSn6 00 00


4.将 M1,M2,M3.......Mn按照以下规则做异或运算(xor)

        T1 = M1 xor M2

        T2 = T1 xor M3

        ............

       T n = T n-1 xor M n+1


5.将Tn转换成16HEXDECIMAL  (HEX_BLOCK):例如62B6623F603807D1转成36 32 42 36 36 32 33 46 36 30 33 38 30 37 44 31


6.将HEX_BLOCK前8位(36 32 42 36 36 32 33 46

用MAK加密ENC BLOCK1 = eMAK(TM311TM312 TM321 TM322 TM331 TM332 TM341 TM342)= EN11 EN12EN13 EN14 EN15 EN16 EN17 EN18


7.将BLOCK1与步骤5中的后8位做xor异或运算得到TEMP BLOCK


8.用异或的结果TEMP BLOCK 再进行一次单倍长密钥算法运算。

ENC BLOCK2 = eMAK(TE11 TE12 TE13 TE14 TE15 TE16TE17 TE18) = EN21 EN22 EN23 EN24 EN25 EN26EN27 EN28


9.将运算后结果BLOCK转换成16个HEXDECIMAL (与步骤5一样)。


10.取步骤9中的前8位,就是MAC鉴别码。


例子:

签到POS中心返回数据:

00 64 60 00 00 00 02 60 31 00 31 00 31 08 10 00 38 00 00 0A C0 00 14 00 01 08 09 01 49 08 12 31 32 33 34 35 36 37 38 39 30 31 32 30 30 31 32 33 34 35 36 37 38 31 32 33 34 35 36 36 37 38 39 39 38 35 35 35 00 11 00 00 00 31 00 10 00 24 42 8B A7 06 11 8F C6 66 A8 54 1F 81 42 8B A7 06 11 8F C6 66 A8 54 1F 81 

POS终端执行一次消费发送数据:(其中后8位就是MAC鉴别码)

00 A9 60 00 02 00 00 60 31 00 31 00 31 02 00 30 24 04 C0 30 C0 98 11 00 00 00 00 00 00 12 34 56 00 01 09 49 12 02 10 00 06 34 62 00 48 70 10 58 89 72 D4 91 21 20 11 12 70 05 00 01 01 99 62 00 48 70 10 58 89 72 D3 44 11 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 49 12 0D 00 00 00 00 00 00 D0 00 00 00 00 00 0D 10 00 00 00 00 00 00 00 31 32 33 34 35 36 37 38 31 32 33 34 35 36 36 37 38 39 39 38 35 35 35 31 35 36 42 9A F5 66 07 08 E9 AD 20 00 00 00 00 00 00 00 00 14 22 00 00 31 00 06 01 46 34 35 39 38 33 39 43 


=================================================开始解密======================================================================

1.解析签到返回报文获得skey=42 8B A7 06 11 8F C6 66

2.解密得到MAC工作密钥明文meky=35 35 37 32 34 30 34 34

3.对MAB作异或运算得到最后的结果Tn=62 B6 62 3F 60 38 07 D1

4.转成16个HEX:36 32 42 36 36 32 33 46         36 30 33 38 30 37 44 31

5.对前8个做DES加密得到BLOCK1 = D9 93 F5 13 FE A9 69 39

6.将BLOCK1与步骤4后8位数据做XOR运算得到TEMP BLOCK=EF A3 C6 2B CE 9E 2D 08

7.对TEMP BLOCK做DES加密得到BLOCK2=F4 59 83 9C 56 E2 86 66

8.将BLOCK2中的前8位转成HEX就是我们需要的MAC=446 34 35 39 38 33 39 43,与消费发送数据报文对比一致。

其中步骤1解密MAC工作密钥密文的密钥是根据自己的POS中心来定的。还有解密的DES算法也是根据POS中心专门定制。所以以上计算数据只是作参考,没必要去算。


               




你可能感兴趣的:(8583报文)