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转换成16个HEXDECIMAL  (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报文MAC验证实现过程相关推荐

  1. 8583 报文解析过程

    一. 全局概述 1. <多渠道平台接入接口规范>这个标准规定了各种接入端(主要包括直联多渠道平台的终端, 包括这里主要关注的POS机)与中国银联多渠道平台之间进行联机交易时使用的报文接口, ...

  2. 谈谈8583报文的使用及测试

    ISO8583报文在金融行业可谓是声名显赫,8583报文是一个国际标准的包格式,其重要性阿堂就不用多说了,网上有很多的介绍,不过对于一个从未接触过8383报文的新手来说,还是很有难度的.它主要是用来解 ...

  3. 8583报文的使用和解析

    ISO8583报文(简称8583包)又称8583报文是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分. 8583包前面一段为位图,用来确定包的字段域组成情况. ...

  4. C解析8583报文55域

    以下这段代码是C解析8583报文,我直接从我们系统粘贴出来的,供大家参考.打日志log部分,请自行更改,TAG标签也可以根据你的55域做相应删减. typedef struct {         c ...

  5. 关于8583报文详解

    本文章是对8583报文深入的解析,主要是针对于8583报文已经很熟悉的人 我们来看一段8583报文: 0059600045000060011100000001007024048000C08011166 ...

  6. ISO 8583报文

    ISO 8583包(简称8583报文),金融交易卡原始电文-交易电文规范,是一个由国际标准化组织为其定义了消息格式和交易流程,以便于不同的系统能够交换交易请求和响应信息.8583报文交融交易信息数据包 ...

  7. 银联银行卡交换系统8583报文解析

    前言 最近在做8583报文这块解析,也遇到一些坑.下面将会介绍自己学习和了解8583报文这块的经验,希望可以帮到那些刚刚接触8583报文的同学们. 入门 首先我们需要知道的是我们的8583报文是基于P ...

  8. 银联8583报文规范详解

    银联8583报文规范详解 自己的理解 转载的内容 自己的理解 转载的内容 以下来自转载地址 https://www.jianshu.com/p/203ed7f632cf 一.什么是8583报文规范? ...

  9. Go语言银联8583报文解析库,支持联小额免密付和银商聚合支付

    很早之前就整过一个Go语言版的银联8583报文解析库,当时仅是8583报文的解析. 最近整合了进了银联小额双免交易和银商的聚合支付交易通道,这可以是网上最简单的8583报文解析库了. 银联双免支付通道 ...

最新文章

  1. 配置项目启动的时候就加载 servlet
  2. golang 关于golang.org/x包问题
  3. 第二章 Matlab变量
  4. 7.2 DOM方法(以动态方式实时创建标记,实质在改变DOM节点树)
  5. 华中科技大学应用高等工程数学_专业解析【第152期】| 机械电子工程课程设置及研究方向...
  6. POJ - 1847 Tram(dijkstra)
  7. 设计模式1—创建型模式
  8. 数字图像处理--图像增强之对比度拉伸
  9. 如何用python处理图片_如何用python获取图像
  10. android+mid播放器,手机midi播放器下载
  11. 实现京东商城手机注册获取验证码
  12. easyui的combobox根据拼音搜索选项
  13. fn键台式计算机在哪,fn键在哪?老司机教你fn键使用方法
  14. jenkins k8s trying and failing to pull image
  15. 定义一个图形抽象类,完成三角形、圆形、矩形的周长和面积计算
  16. 为何能力越强越不被重用?不懂这3点,你到哪里都混不好,不服不行
  17. 虚拟机网络模式(NAT模式)
  18. Excel如何将数据拆分开
  19. 最新版NASA官方网站数据下载流程——以MODIS数据演示为例
  20. zip4j报错Probably not a zip file or a corrupted zip file

热门文章

  1. #每日一题 力扣第22题 黑白格子画
  2. 电商系统之延长收货与申请退款
  3. linux命令top查看进程,linux 查看进程的命令(top)
  4. vivo X系列为什么能不断拉高手机上限?
  5. 五种方法教你预防ddos攻击
  6. Win10 DISM 清理 C盘的 WinSXS 文件夹
  7. 2010世界财富排行榜
  8. JavaScript高级教程(25)——ES6
  9. VUE前端开发环境版本查看命令
  10. C#按钮添加图片的解决