2 linlias12 linlias12 于 2014.05.30 17:41 提问

8583报文MAC算法以及MAC串的数据格式问题

最近在做8583的接口联调,目前手头只有一份文档描述,小弟也是头一次接触8583,目前卡在MAC校验这一关了,无论怎么算MAC,发过去返回的都是A0,MAC校验错,
原8583文档关于MAC算法描述如下:

将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC ELEMEMENT BLOCK (MAB)

问题就是,这个发送给POS中心的消息格式到底要什么样的?

比如原数据:

loginData.put("2", "4367450070849241");// 主帐号 最大19字节BCD
        loginData.put("3", "000000");// 处理码  定长6字节
        loginData.put("4", "000000000001");// 交易金额 定长12字节
        loginData.put("11", "123456");// 流水号 定长6字节
        //loginData.put("14", "0218");// 有效期 定长4字节 
        loginData.put("22", "012");//输入方式码 后一个0为左靠右补0 定长3字节
        loginData.put("25", "00");//服务点条件码 消费固定00
        loginData.put("41", "00015719");//终端号
        loginData.put("42", "105110070110485");// 商户号
        loginData.put("49", "156");//货币代码 000000080030
        loginData.put("60", "22000008"); //2200009100050

以上是原数据。
拼装成字符串后:

4367450070849241000000000000000001123456012000001571910511007011048515622000008

按照文档要求,对一些数据进行左补空格 或者右补‘0’或者转化为16进制位后:

4360075312486901000000000000000001123456012 ** 0 ** 000001531110500327001051131353622000005003 ** 0 **

再给各个数字域添加长度后:
** 16 ** 436007531248690100000000000000000112345601200000015311105003270010511313536 ** 0011 ** 220000050030

以上这几种 到底应该选哪种去做MAC运算呢?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
转 8583包 mac算法
转:POS DES MAC 算法   DES和MAC加解密算法,已经在多个产品中得到了实际应用,不需任何修改就可使用 本文根据《中国银联直联POS终端规范》的阐述,用C语言编程实现,该算法在实际的商业POS终端中使用。POS终端采用ECB的加密方式,简述如下: a) 将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC  ELEMEMENT
iso8583报文mac、pin计算方式
支付,金融iso8583报文mac计算、pin计算
8583报文MAC验证实现过程
POS终端在与POS中心进行数据交易之前,需要生产MAC(报文鉴别码),这样POS中心在收到POS终端报文后,可以对报文也进行MAC认证,保证报文的正确性。 这篇文章主要讲解如何利用报文数据生成MAC。主要有以下步骤:(本次主要采用单倍长DES加解密算法) 1.通过解析向POS中心签到后返回的报文中的62域获得MAC的工作密钥的密文skey。 2.利用后台和POS终端规定好的
8583报文结构分析及C语言实现
8583报文结构分析及C语言实现 ------报文结构分析   曹玉坤                       2011-7-11       目  录 1     概述... 3 2     8583报文结构... 3 3     各字段意义说明... 4 4     报文结构样例... 4 5     报文内容样例...
报文MAC算法java实现
/** * */ package net.etongbao.common.utils; import java.util.Arrays; /** * Mac工具类,采用ECB算法 * * @author Fu Wei * */ public class MacEcbUtils { public static byte[] IV = new byte[8]; publi
ISO8583开发注意事项和心得体会
前阵时间, 有幸参与公司的社保类项目. 其中, 本人负责的是银联对接的部分接口, 主要参考协议为ISO8583, 而银联就此提供了等接口文档供开发参考. 鉴于本人忘性较大, 悟性也较低, 所以整理记录下来以便后续开发维护, 希望能对后来者也提供些许帮助.  本文全文原创, 可供参考和引用, 仅希望引用者注明出处, 已是不甚感激; 如果能在引用的时候, 再适当添加自己的见解并帮助更多童鞋获取知识,
8583报文格式
<br />ISO8583包(简称8583包)是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。8583包前面一段为位图,用来确定包的字段域组成情况。<br />其中位图是8583包的灵魂,它是打包解包确定字段域的关键,而了解每个字段域的属性则是填写数据的基础,<br /> 1、位图描述如下:<br />位图位置:1 <br />格式:定长<br />类型:B16(二进制 16位,16*8=128bit)<br />描述:<br />如将位图的第一位设为'1',表
安全报文中的MAC计算方法
安全报文中的MAC计算方法 校验码(MAC)总是命令或命令响应数据域中最后一个数据元素。规定MAC的长度皆为4个字节。当命令的数据域中要求必须带MAC时,即命令安全报文传送,命令头中CLA字节的低半字节必须等于十六进制数字‘4’。 命令安全报文中的MAC是使用命令的所有元素(包括命令头和包含在命令数据域中的数据)来产生的。从而保证命令连同数据能够正确完整地传送,并对发送方进行认
ISO8583报文64域
调试ISO8583报文每个域
8583位图与MAC工具
金额8583报文位图工具与MAC计算工具