近期研究支付相关的内容,遇到一个加密的算法--mac算法,研究了一下,本文以实例一步步分析说明mac计算的步骤,特此记录;
文档按步骤示例说明pos8583银联标准MAC校验过程
本层MacUtils文件夹中的函数是MAC算法成功了的(E:\Project\我的工具包\8583MAC计算\MacUtils)(本地程序目录请忽略);
开始搞起:
实例:
TAK明文密钥:55036372B17543ECB173730768B8D6C4
计算MAC的数据(消息头到63域):
MAB:08300000000002C000153030363730303436343238393733373031373933323330303200110000000137200277319F0605A0000003339F220103DF050832303234313233319F0605A0000003339F220104DF050832303234313233319F0605A0000003339F220102DF050832303231313233319F0605A0000000039F220107DF050832303137313233319F0605A0000000039F220108DF050832303233313233319F0605A0000000039F220109DF050832303233313233319F0605A0000000659F220110DF050832303232313233319F0605A0000000659F220112DF050832303232313233319F0605A0000000659F220114DF050832303232313233319F0605A0000000049F220104DF050832303137313233319F0605A0000000049F220105DF050832303231313233319F0605A0000000049F220106DF05083230323131323331
64域为(MAC):3546453035384442
开始计算:::
- 对MAB,按每8个字节做异或(不管信息中的字符格式),如果最后不满8个字节,则添加“0X00”。
使用工具直接计算异或后的结果,工具为:如图:
MAB异或后的结果为:12 12 B0 4E 12 27 80 9C
二、对上面结果去空格并转成16进制:31323132423034453132323738303943
使用这个工具可以快速转换:
三、使用上述16进制数的前8个字节用TAK明文进行3DES加密:也就是(3132313242303445和TAK明文密钥:55036372B17543ECB173730768B8D6C4),结果为8B29461A844BA5EC
四、使用加密后的结果8B29461A844BA5EC跟第二步中异或后的16进制后8位3132323738303943进行异或结果为:BA1B742DBC7B9CAF
五、把第四步异或的结果BA1B742DBC7B9CAF再使用TAK明文加密结果为5FE058DB90680D33
六、将5FE058DB90680D33转成16进制35464530353844423930363830443333
七、取转换后数据前8字节为3546453035384442,即为MAC值,转换成字符串形式为MAC:5FE058DB;跟后台返回的一致,mac校验通过;
计算MAC总图:
要计算MAC的数据:
MAB:08300000000002C000153030363730303436343238393733373031373933323330303200110000000137200277319F0605A0000003339F220103DF050832303234313233319F0605A0000003339F220104DF050832303234313233319F0605A0000003339F220102DF050832303231313233319F0605A0000000039F220107DF050832303137313233319F0605A0000000039F220108DF050832303233313233319F0605A0000000039F220109DF050832303233313233319F0605A0000000659F220110DF050832303232313233319F0605A0000000659F220112DF050832303232313233319F0605A0000000659F220114DF050832303232313233319F0605A0000000049F220104DF050832303137313233319F0605A0000000049F220105DF050832303231313233319F0605A0000000049F220106DF05083230323131323331
64域===MAC:3546453035384442
TAK(macKey)明文: 55036372B17543ECB173730768B8D6C4
MAB 的mac8字节异或:12 12 B0 4E 12 27 80 9C 去空格==> 1212B04E1227809C 转成16进制==> 3132313242303445 3132323738303943
取前8字节(3132313242303445)与TAK3DES加密的结果为
8B29461A844BA5EC
取后8字节域上加密结果异或结果为
BA1B742DBC7B9CAF
上结果再与TAK3DES加密的结果为
5FE058DB90680D33
上结果转为16进制
35464530353844423930363830443333
取前8字节即为MAC值:3546453035384442 转为字符串形式==> 5FE058DB
跟64域返回结果一致,mac校验通过;
标准银联8583MAC计算解析完毕,如有问题,欢迎打扰,一起学习,进步!博主不同意,请勿转载,谢谢!
注:如有问题可以回复,看到第一时间分析解决,码农不易,感觉对您有用,帮助到您,可否打赏一杯可乐,在此谢过诸位,愿诸君终成大神,前程似锦~~~