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转换成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验证实现过程相关推荐
- 8583 报文解析过程
一. 全局概述 1. <多渠道平台接入接口规范>这个标准规定了各种接入端(主要包括直联多渠道平台的终端, 包括这里主要关注的POS机)与中国银联多渠道平台之间进行联机交易时使用的报文接口, ...
- 谈谈8583报文的使用及测试
ISO8583报文在金融行业可谓是声名显赫,8583报文是一个国际标准的包格式,其重要性阿堂就不用多说了,网上有很多的介绍,不过对于一个从未接触过8383报文的新手来说,还是很有难度的.它主要是用来解 ...
- 8583报文的使用和解析
ISO8583报文(简称8583包)又称8583报文是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分. 8583包前面一段为位图,用来确定包的字段域组成情况. ...
- C解析8583报文55域
以下这段代码是C解析8583报文,我直接从我们系统粘贴出来的,供大家参考.打日志log部分,请自行更改,TAG标签也可以根据你的55域做相应删减. typedef struct { c ...
- 关于8583报文详解
本文章是对8583报文深入的解析,主要是针对于8583报文已经很熟悉的人 我们来看一段8583报文: 0059600045000060011100000001007024048000C08011166 ...
- ISO 8583报文
ISO 8583包(简称8583报文),金融交易卡原始电文-交易电文规范,是一个由国际标准化组织为其定义了消息格式和交易流程,以便于不同的系统能够交换交易请求和响应信息.8583报文交融交易信息数据包 ...
- 银联银行卡交换系统8583报文解析
前言 最近在做8583报文这块解析,也遇到一些坑.下面将会介绍自己学习和了解8583报文这块的经验,希望可以帮到那些刚刚接触8583报文的同学们. 入门 首先我们需要知道的是我们的8583报文是基于P ...
- 银联8583报文规范详解
银联8583报文规范详解 自己的理解 转载的内容 自己的理解 转载的内容 以下来自转载地址 https://www.jianshu.com/p/203ed7f632cf 一.什么是8583报文规范? ...
- Go语言银联8583报文解析库,支持联小额免密付和银商聚合支付
很早之前就整过一个Go语言版的银联8583报文解析库,当时仅是8583报文的解析. 最近整合了进了银联小额双免交易和银商的聚合支付交易通道,这可以是网上最简单的8583报文解析库了. 银联双免支付通道 ...
最新文章
- 配置项目启动的时候就加载 servlet
- golang 关于golang.org/x包问题
- 第二章 Matlab变量
- 7.2 DOM方法(以动态方式实时创建标记,实质在改变DOM节点树)
- 华中科技大学应用高等工程数学_专业解析【第152期】| 机械电子工程课程设置及研究方向...
- POJ - 1847 Tram(dijkstra)
- 设计模式1—创建型模式
- 数字图像处理--图像增强之对比度拉伸
- 如何用python处理图片_如何用python获取图像
- android+mid播放器,手机midi播放器下载
- 实现京东商城手机注册获取验证码
- easyui的combobox根据拼音搜索选项
- fn键台式计算机在哪,fn键在哪?老司机教你fn键使用方法
- jenkins k8s trying and failing to pull image
- 定义一个图形抽象类,完成三角形、圆形、矩形的周长和面积计算
- 为何能力越强越不被重用?不懂这3点,你到哪里都混不好,不服不行
- 虚拟机网络模式(NAT模式)
- Excel如何将数据拆分开
- 最新版NASA官方网站数据下载流程——以MODIS数据演示为例
- zip4j报错Probably not a zip file or a corrupted zip file