PBOC联机交易中ARQC及ARPC的计算
金融IC卡在申请联机交易时,终端会进行发卡行认证,验证卡片的合法性,终端通过GAC得到卡片返回的ARQC,与终端自身产生的ARQC进行比较,如果一致,则说明是由发卡行发行的合法卡片,同时对ARQC及认证码进行3DES计算,返回ARPC,卡片得到ARPC后进行外部认证,用以验证终端的合法性。
计算ARQC的步骤为:
1.发送GAC
2.利用应用主密钥(ARQC KEY即DGI8000前16字节)对ATC前补000000000000与ATC的反前补000000000000拼接的数据(如ATC为0001,则这里是0000000000000001000000000000FFFE)做3DES加密算出过程密钥SKAC,
3.组织数据授权金额至不可预知数(TAG 9F49的值,动态数据认证时发内部认证的数据),加上AIP、ATC、卡片验证结果补80,
4.用过程密钥SKAC对上述组织的数据进行MAC计算即可得到ARQC的值举例如下:
1.终端发送GAC:80AE8000340000000012340000000000340156D86004A800015612051601010101010903200000000000000000000000000000000000000000
卡片返回:801E80000EF294D7022FA9B05807020103A4B904010A0100000000001BFC423C
卡片应用子密钥(DGI8000前16字节):0D2E3CB0BC1F9E03AED58F663A2F9679
可知ATC=000E ARQC=F294D7022FA9B058 卡片验证结果为:03A4B904 AIP:7C00
2.用卡片应用子密钥0D2E3CB0BC1F9E03AED58F663A2F9679对000000000000000E000000000000FFF1做3DES加密得到过程密钥SKAC:C3D3F062E9992B4E923D338D66193526
3.从GAC返回数据及AIP等进行数据组织:0000000012340000000000340156D86004A80001561205160101010101+7C00+000E+03A4B904+800000
4.用SKAC对上述数据做PBOCMac计算得到:F294D7022FA9B058
ARPC的计算过程相对简单:
1.将ARQC与服务码+6字节0进行异或
2.用计算ARQC的过程密钥对异或结果进行3DES加密(过程密钥与上述ARQC计算相同)即为ARPC
3.卡片利用终端返回的ARPC+服务码进行外部认证
举例如下:
采用上述GAC返回的ARQC:F294D7022FA9B058
1.F294D7022FA9B058和3030000000000000异或C2A4D7022FA9B058
2.用C3D3F062E9992B4E923D338D66193526进行3DES加密得到结果ARPC:3846EEB4C8D34271
3.外部认证:008200000A 3846EEB4C8D34271 3030
文章来源:SingCard的博客
原文: https://www.duoluodeyu.com/2313.html
PBOC联机交易中ARQC及ARPC的计算的更多相关文章
- ARQC与ARPC的生成和校验方法
转载:https://www.cnblogs.com/ttss/p/4364328.html ARQC:authenticate request cryptogram,授权请求报文 ARPC:auth ...
- 金融IC卡 ARQC和ARPC计算方法和实例(转)
假设发卡行的IC卡应用密钥如下: PBOC_IMK_AC F0C34A8124CEE0A91A0B034AA97D6EAC PBOC_IMK_ENC ...
- android/java 根据当前时间判断股票交易状态(未开盘 交易中 休市中 已收盘)
/** * @param data yyyy-MM-dd HH:mm:ss 时间 * @return 未开盘 交易中 休市中 已收盘 */ public static String getSotckS ...
- 量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python)(转)
量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python) 原文地址:http://blog.csdn.net/u012234115/article/details/728300 ...
- Java才是世界上最好的语言,Java在高频交易中替代C++
高频交易 高频交易是指从那些人们无法利用的极为短暂的市场变化中寻求获利的计算机化交易,比如,某种证券买入价和卖出价差价的微小变化,或者某只股票在不同交易所之间的微小价差.在高频交易中,自动化应用程序每 ...
- Android中图片占用内存的计算
Android中图片占用内存的计算 原文链接 http://blog.sina.com.cn/s/blog_4e60b09d01016133.html 在Android开发中,我现在发现很多人还不 ...
- DNA序列编码中Hairpin的定义和计算
DNA序列编码中Hairpin的定义和计算 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 [1] 张凯. DNA计算核酸编码优化及算法设计[D]. 2008. [2] Shin, ...
- echo $[1 + 2] shell中 $[] 在bash中同$(()),用于算术计算
shell脚本编写:echo $[ 11#8+1] 输出结果是几,为什么,怎么算来的? 摘自:https://zhidao.baidu.com/question/334766451.html 结 ...
- CSS中选择器优先级的权重计算
CSS中选择器优先级的权重计算 先看一段代码,如下: a{ color: red; } #box a{ color: green; } [class="box"] a{ color ...
随机推荐
- CKFinder根据用户设置权限,不同用户有自己的私有的、独立的文件夹
CKFinder 默认情况下多个用户共用同一个图片目录.所有上传的图片和Flash全部保存在同一个文件夹(默认为 userfiles)内. 现在想实现: 第1个需求:不同用户有自己的私 ...
- 深入分析JavaWeb Item40 -- 文件上传和下载
在Web应用系统开发中,文件上传和下载功能是很经常使用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传.浏览器在上传的过程中是将文件以流的形式提交到server端的.假设 ...
- Spark 开发环境搭建
原文见 http://xiguada.org/spark-develop/ 本文基于Spark 0.9.0,由于它基于Scala 2.10,因此必须安装Scala 2.10,否则将无法运行Spar ...
- 轻量级的前端UI开发框架 - UIkit
来源:GBin1.com UIkit是YOOtheme团队开发的开源的前端UI界面框架,可以帮助你快速的开发和创建前端UI界面. 基于下列开源项目: LESS jQuery normalize.css ...
- J2EE环境搭建(三)配置Tomcat 7.0的局部数据源
在J2EE环境搭建(一)中遗留下一个配置Tomcat数据源的问题,最近都在专心搞iOS的东西,由于J2EE布置了作业,所以又回过头来搞下J2EE.汗... 在这里我使用的是MySQL. 1.配置MyS ...
- js调试工具console方法详解
一.显示信息的方法 最常用的console.log(),一般用来调试. console.log('hello'); console.info('信息'); console.error('错误'); c ...
- 如何让你的webapp也能跳窗口搜索
目前很多手机app或者一些webapp,搜索栏基本采用跳窗口的搜索方式 怎么做 实现方式: 1.在触发外层的input的时候打开个modal层,默认打开该modal层的时候就触发了moda里面的inp ...
- 07-hibernate注解-一对多(多对一)双向外键关联
一对多(多对一)双向外键 多方:多方持有一方的引用. @ManyToOne(cascade={CasCadeType.ALL},fetch=FetchType.EAGER) @JoinColumn(n ...
- win7 linux双系统删除linux
本文内容收集自互联网,共两篇,中间以“分界线”进行分割. linux的卸载 一.win7与linux都使用grub来引导 卸载:不能直接删除ubuntu分区,这样会造成win7也启动不了 正确方法: ...
- 特殊文件权限(setuid、setgid 和 Sticky 位)
可执行文件和公共目录可以使用三种特殊类型的权限:setuid.setgid 和 sticky 位.设置这些权限之后,运行可执行文件的任何用户都应采用该可执行文件属主(或组)的 ID. setuid 权 ...