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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!