8583报文MAC算法以及MAC串的数据格式问题 java基本在做应用层的事你这个在拼数据报文呢,去嵌入式问问吧 或者通信协议 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道你在说什么。。你那个补0以及添加长度是什么标准上规定的还是什么?还有你有没有MAC校验相关代码? 8583貌似是POS机上的通信协议吧。第一,整个要组装的是二进制的报文,楼主的那个是字符串,根本不是二进制的信息。第二, Java程序一般偏向于应用层的功能,底层数据的处理,用C语言比较有优势,如果非要用Java,那写起程序来比较麻烦。第三, 这个问题发在Java版里,能解答的人比较少。发到C语言,或者串口通信之类的版中,可能效果好些。最后,谈谈我的想法:首先,通信一些一般报文中,都具备包头、包体、包尾三个部分。其次,包头一般都是定长的,包体变长,包尾是校验信息。第三,楼主给出的数据,没有包头和包尾,并且,包体也应该写成十六进制形式,看起来相对专业一点,弄个字符串出来,感觉像是外行人。最后,发现楼主对8583协议的理解和实现上,存在很大差距。不妨再仔细研究一下协议和协议的实现部分。磨刀不误砍柴工。 8583是POS上的报文,而且发送的是16进制的报文的,只不过在发送的时候转化成BYTE字节发送过去的 <<中国银联POS终端规范>>:http://wenku.baidu.com/link?url=yb9juRg89ZwJ2JBNDsJqClPUKEuqWBnD07B1BGBCfndnZakahaCQzPF-Ub7B5HVCvIvQKjpRkeciehGgMSzjy0jWna8yBVH6YzHR4RMu3Hq这个是8583的文档,拼装的数字域格式什么的都是参照这个文档写的,而且目前还没到MAC校验呢,就是我这边发报文过去,银行那头直接返回校验错误,各位没有接触过8583 报文协议的吗? 这个消息格式,楼主只要有耐心的研读一下《中国银联POS终端规范》就能在里面找到了。POS终端交换信息的数据中,分为三个部分: TPDU、报文头、应用数据。其中,应用数据就是IOS8583格式的数据。IOS8583格式的数据中,也可以分成三个部分:消息类型、位元表、域数据区。消息类型是4个字节长度的数据,位元表是8字节(共64位)或者16字节(128位)的数据,域数据区是变长的。MAC的MAB我个人理解就是8583报文中除了最后你要算的校验域数据以外的所有数据序列(64位位元表是这样,128位位元表相对复杂一点)。 MAC计算需要用到密钥的,而且一般不会用明文,大都是有硬件设备的。 楼主说的这个我不太明白是什么意思~我跟你说一下我当初做的8583报文mac检验:双方约定哪些重要字段参与mac检验(这个基本上是固定的~接口中只要有定义这些字段都要参与检验);约定mac算法(你用的应该是由对方提供的算法)……然后发报文前你这边就要通过上述两个约定计算出mac域(接口中应该有告诉你哪个bit位是用来传mac的),然后你把Mac值和你上面的报文拼起来发送给对方,对方再根据约定从你的报文中取出关键字段通过约定算法计算出mac值,然后把这个值和你通过报文上送给他的Mac值比较看是否一致!明白了吗?用手机打好费劲╰_╯ MAC 算法固定, 主要是要从那个字段开始到哪个字段结束 每家发卡机构不一样 首先你要了解8583包报文每个域的格式,比如BCD、ANSI、bit,组成MAB串是不可显字符串,16进制确定DES算法,单DES还是3DES1、8个字节为一组,不足8个字节后补0x002、采用MAC KEY进行ECB运算(应该是MAB8个字节异或,最后异或结果为8个字节,再用MAC KEY 进行DES加密)3、加密后的结果为8个字节串,不可显字符,打包进8583包64域上送即可。 以你的字据字串,以十六进制展开显示为:43674500708492410000000000000000011234560218001200303030313537313931303531313030373031313034383501563232303030303038不足8个字节(展开后16个字符),不足8个字节,以0x00进行后补补足。不好意思,MAB应该是以下字符串(忘加了自定域长度头了):16436745007084924100000000000000000112345602180012003030303135373139313035313130303730313130343835015600083232303030303038 其实楼上的算法是错的。pos规范的附录里面有具体计算8583mac的算法。要做2次单des加密的。 linux下学java 装jdk时遇到一个奇怪的问题 java参数 paintComponent的问题 java CS 项目如何加密? 用Eclipse3.2开发图形界面需要什么插件!急等!! 请教!!! 请教大家一个怪问题的实现:在public static void main()里写个方法,并在里面直接调用,请问该怎么写? 论try 与 catch 的思考 打开网页超时问题 难道有熟java确不精于c/c++的程序员? 超级新手求助!!! 关于RMI的一个问题
你那个补0以及添加长度是什么标准上规定的还是什么?
还有你有没有MAC校验相关代码?
首先,通信一些一般报文中,都具备包头、包体、包尾三个部分。
其次,包头一般都是定长的,包体变长,包尾是校验信息。
第三,楼主给出的数据,没有包头和包尾,并且,包体也应该写成十六进制形式,看起来相对专业一点,
弄个字符串出来,感觉像是外行人。
最后,发现楼主对8583协议的理解和实现上,存在很大差距。不妨再仔细研究一下协议和协议的实现部分。
磨刀不误砍柴工。
http://wenku.baidu.com/link?url=yb9juRg89ZwJ2JBNDsJqClPUKEuqWBnD07B1BGBCfndnZakahaCQzPF-Ub7B5HVCvIvQKjpRkeciehGgMSzjy0jWna8yBVH6YzHR4RMu3Hq
这个是8583的文档,拼装的数字域格式什么的都是参照这个文档写的,而且目前还没到MAC校验呢,就是我这边发报文过去,银行那头直接返回校验错误,各位没有接触过8583 报文协议的吗?
POS终端交换信息的数据中,分为三个部分: TPDU、报文头、应用数据。
其中,应用数据就是IOS8583格式的数据。
IOS8583格式的数据中,也可以分成三个部分:消息类型、位元表、域数据区。
消息类型是4个字节长度的数据,位元表是8字节(共64位)或者16字节(128位)的数据,域数据区是变长的。MAC的MAB我个人理解就是8583报文中除了最后你要算的校验域数据以外的所有数据序列(64位位元表是这样,128位位元表相对复杂一点)。
确定DES算法,单DES还是3DES
1、8个字节为一组,不足8个字节后补0x00
2、采用MAC KEY进行ECB运算(应该是MAB8个字节异或,最后异或结果为8个字节,再用MAC KEY 进行DES加密)
3、加密后的结果为8个字节串,不可显字符,打包进8583包64域上送即可。
以你的字据字串,以十六进制展开显示为:
43674500708492410000000000000000011234560218001200303030313537313931303531313030373031313034383501563232303030303038不足8个字节(展开后16个字符),不足8个字节,以0x00进行后补补足。不好意思,MAB应该是以下字符串(忘加了自定域长度头了):
16436745007084924100000000000000000112345602180012003030303135373139313035313130303730313130343835015600083232303030303038
pos规范的附录里面有具体计算8583mac的算法。
要做2次单des加密的。