java基本在做应用层的事你这个在拼数据报文呢,去嵌入式问问吧 或者通信协议

解决方案 »

  1.   

    不知道你在说什么。。
    你那个补0以及添加长度是什么标准上规定的还是什么?
    还有你有没有MAC校验相关代码?
      

  2.   

    8583貌似是POS机上的通信协议吧。第一,整个要组装的是二进制的报文,楼主的那个是字符串,根本不是二进制的信息。第二, Java程序一般偏向于应用层的功能,底层数据的处理,用C语言比较有优势,如果非要用Java,那写起程序来比较麻烦。第三, 这个问题发在Java版里,能解答的人比较少。发到C语言,或者串口通信之类的版中,可能效果好些。最后,谈谈我的想法:
    首先,通信一些一般报文中,都具备包头、包体、包尾三个部分。
    其次,包头一般都是定长的,包体变长,包尾是校验信息。
    第三,楼主给出的数据,没有包头和包尾,并且,包体也应该写成十六进制形式,看起来相对专业一点,
    弄个字符串出来,感觉像是外行人。
    最后,发现楼主对8583协议的理解和实现上,存在很大差距。不妨再仔细研究一下协议和协议的实现部分。
    磨刀不误砍柴工。
      

  3.   

    8583是POS上的报文,而且发送的是16进制的报文的,只不过在发送的时候转化成BYTE字节发送过去的
      

  4.   

    <<中国银联POS终端规范>>:
    http://wenku.baidu.com/link?url=yb9juRg89ZwJ2JBNDsJqClPUKEuqWBnD07B1BGBCfndnZakahaCQzPF-Ub7B5HVCvIvQKjpRkeciehGgMSzjy0jWna8yBVH6YzHR4RMu3Hq
    这个是8583的文档,拼装的数字域格式什么的都是参照这个文档写的,而且目前还没到MAC校验呢,就是我这边发报文过去,银行那头直接返回校验错误,各位没有接触过8583 报文协议的吗?
      

  5.   

    这个消息格式,楼主只要有耐心的研读一下《中国银联POS终端规范》就能在里面找到了。
    POS终端交换信息的数据中,分为三个部分: TPDU、报文头、应用数据。
    其中,应用数据就是IOS8583格式的数据。
    IOS8583格式的数据中,也可以分成三个部分:消息类型、位元表、域数据区。
    消息类型是4个字节长度的数据,位元表是8字节(共64位)或者16字节(128位)的数据,域数据区是变长的。MAC的MAB我个人理解就是8583报文中除了最后你要算的校验域数据以外的所有数据序列(64位位元表是这样,128位位元表相对复杂一点)。
      

  6.   

    MAC计算需要用到密钥的,而且一般不会用明文,大都是有硬件设备的。
      

  7.   

    楼主说的这个我不太明白是什么意思~我跟你说一下我当初做的8583报文mac检验:双方约定哪些重要字段参与mac检验(这个基本上是固定的~接口中只要有定义这些字段都要参与检验);约定mac算法(你用的应该是由对方提供的算法)……然后发报文前你这边就要通过上述两个约定计算出mac域(接口中应该有告诉你哪个bit位是用来传mac的),然后你把Mac值和你上面的报文拼起来发送给对方,对方再根据约定从你的报文中取出关键字段通过约定算法计算出mac值,然后把这个值和你通过报文上送给他的Mac值比较看是否一致!明白了吗?用手机打好费劲╰_╯
      

  8.   

    MAC  算法固定, 主要是要从那个字段开始到哪个字段结束 每家发卡机构不一样
      

  9.   

    首先你要了解8583包报文每个域的格式,比如BCD、ANSI、bit,组成MAB串是不可显字符串,16进制
    确定DES算法,单DES还是3DES
    1、8个字节为一组,不足8个字节后补0x00
    2、采用MAC KEY进行ECB运算(应该是MAB8个字节异或,最后异或结果为8个字节,再用MAC KEY 进行DES加密)
    3、加密后的结果为8个字节串,不可显字符,打包进8583包64域上送即可。
      

  10.   


    以你的字据字串,以十六进制展开显示为:
    43674500708492410000000000000000011234560218001200303030313537313931303531313030373031313034383501563232303030303038不足8个字节(展开后16个字符),不足8个字节,以0x00进行后补补足。不好意思,MAB应该是以下字符串(忘加了自定域长度头了):
    16436745007084924100000000000000000112345602180012003030303135373139313035313130303730313130343835015600083232303030303038
      

  11.   

    其实楼上的算法是错的。
    pos规范的附录里面有具体计算8583mac的算法。
    要做2次单des加密的。