热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

有没有谁搞过银联POS终端mac算法[php版本]?

安全机制对报文进行MAC,以实现防篡改发起方先对标签数据进行Base64编码,根据编码后的数据,然后进行循环异或(将数据分成若干个8个字节的数据段,最后不足8位后加0x00补齐8位)。得到标签数据。然后将新的报...
安全机制

对报文进行MAC,以实现防篡改

发起方先对标签数据进行Base64编码,根据编码后的数据,然后进行循环异或(将数据分成若干个8个字节的数据段,最后不足8位后加0x00补齐8位)。得到标签数据。然后将新的报文发送给对方。

为原始报文的Base64编码结果

xml

    
        ccb_pos
        pos_service
        
    
    
    PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48ZGF0YT48cHJvZHVjdD4wMzI2PC9wcm9kdWN0PjxwcmVtaXVtPjExMDAuMDwvcHJlbWl1bT48ZHJpdmVycz48ZHJpdmVyPkphbWVzPC9kcml2ZXI+PGRyaXZlcj5UZWRkeTwvZHJpdmVyPjwvZHJpdmVycz48L2RhdGE+
     8U42KXyd76FSCmRT   //char 16
    

处理方式

接收方在接收到报文后,将标签数据分成若干个8个字节的数据段,最后不足8位后加0x00补齐8位,循环异或一次。然后和标签数据进行比对。如果比对一致表示通过验证,最后将标签数据按照Base64解码,得到交易明文数据。

参考文档

http://blog.163.com/gene_lu/blog/static/6402542120133151112717/

网上找了一段PHP代码

这代码有问题,大概方式。

php

'; var_dump(base64_decode($str)); echo '


'; var_dump(mac_($str)); echo '


'; //说明:MAC算法,将字符串$data分为八字节为单位的数据块,标号为D1,D2,D3..,如果最后的数据块不足 //8字节,则在后面加上\x00直到长度达到8字节为止,最后按照下面流程产生MAC, //8字节的初始值:\x00\x00\x00\x00\x00\x00\x00\x00 //流程:初始值 异或 D1 —>异或的结果进行des 异或 D2 —>异或的结果进行des 异或 D2 —>异或的结果进行des function mac_($data) { //设初始值 $init="\x00\x00\x00\x00\x00\x00\x00\x00"; //对$data进行8字节分割,获得数组 $tmp_data=strtoarray($data,8); $tmp_init=$init; foreach($tmp_data as $value) { //进行异或运算 $tmp_init=myEncrypt($tmp_init,$value); var_dump($tmp_init); //进行加密 //$tmp_init=MCRYPT_str($tmp_init); } var_dump($tmp_init); return bin2hex($tmp_init); } //函数名:strtoarray //说明:将字符串按8字节切割,最后不足8字节的用\x00填补 function strtoarray($str,$limit) { $len=strlen($str); $tmp_arr=array(); $count=floor($len/$limit); $left_num=$len-$count*$limit; for($i=0;$i<$left_num;$i++) { $str.="\x00"; } for($i=0;$i<$count;$i++) { $tmp_arr[]=substr($str,0,$limit); if(strlen($str)>$limit+1) { $str=substr($str,$limit,strlen($str)); } } return $tmp_arr; } //函数名:myEncrypt //说明:异或运算函数 function myEncrypt($string, $key) { for($i=0;$i

不知道哪位研究过没有,怎么做的,没有头绪。

回复内容:

安全机制

对报文进行MAC,以实现防篡改

发起方先对标签数据进行Base64编码,根据编码后的数据,然后进行循环异或(将数据分成若干个8个字节的数据段,最后不足8位后加0x00补齐8位)。得到标签数据。然后将新的报文发送给对方。

为原始报文的Base64编码结果

xml

    
        ccb_pos
        pos_service
        
    
    
    PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48ZGF0YT48cHJvZHVjdD4wMzI2PC9wcm9kdWN0PjxwcmVtaXVtPjExMDAuMDwvcHJlbWl1bT48ZHJpdmVycz48ZHJpdmVyPkphbWVzPC9kcml2ZXI+PGRyaXZlcj5UZWRkeTwvZHJpdmVyPjwvZHJpdmVycz48L2RhdGE+
     8U42KXyd76FSCmRT   //char 16
    

处理方式

接收方在接收到报文后,将标签数据分成若干个8个字节的数据段,最后不足8位后加0x00补齐8位,循环异或一次。然后和标签数据进行比对。如果比对一致表示通过验证,最后将标签数据按照Base64解码,得到交易明文数据。

参考文档

http://blog.163.com/gene_lu/blog/static/6402542120133151112717/

网上找了一段PHP代码

这代码有问题,大概方式。

php

'; var_dump(base64_decode($str)); echo '


'; var_dump(mac_($str)); echo '


'; //说明:MAC算法,将字符串$data分为八字节为单位的数据块,标号为D1,D2,D3..,如果最后的数据块不足 //8字节,则在后面加上\x00直到长度达到8字节为止,最后按照下面流程产生MAC, //8字节的初始值:\x00\x00\x00\x00\x00\x00\x00\x00 //流程:初始值 异或 D1 —>异或的结果进行des 异或 D2 —>异或的结果进行des 异或 D2 —>异或的结果进行des function mac_($data) { //设初始值 $init="\x00\x00\x00\x00\x00\x00\x00\x00"; //对$data进行8字节分割,获得数组 $tmp_data=strtoarray($data,8); $tmp_init=$init; foreach($tmp_data as $value) { //进行异或运算 $tmp_init=myEncrypt($tmp_init,$value); var_dump($tmp_init); //进行加密 //$tmp_init=MCRYPT_str($tmp_init); } var_dump($tmp_init); return bin2hex($tmp_init); } //函数名:strtoarray //说明:将字符串按8字节切割,最后不足8字节的用\x00填补 function strtoarray($str,$limit) { $len=strlen($str); $tmp_arr=array(); $count=floor($len/$limit); $left_num=$len-$count*$limit; for($i=0;$i<$left_num;$i++) { $str.="\x00"; } for($i=0;$i<$count;$i++) { $tmp_arr[]=substr($str,0,$limit); if(strlen($str)>$limit+1) { $str=substr($str,$limit,strlen($str)); } } return $tmp_arr; } //函数名:myEncrypt //说明:异或运算函数 function myEncrypt($string, $key) { for($i=0;$i

不知道哪位研究过没有,怎么做的,没有头绪。

全是二进制的, php 弄, 太费劲了吧. 为何不用 java 来搞

推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
author-avatar
球球小白痴_693
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有