金融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的计算的更多相关文章

  1. ARQC与ARPC的生成和校验方法

    转载:https://www.cnblogs.com/ttss/p/4364328.html ARQC:authenticate request cryptogram,授权请求报文 ARPC:auth ...

  2. 金融IC卡 ARQC和ARPC计算方法和实例(转)

    假设发卡行的IC卡应用密钥如下:   PBOC_IMK_AC               F0C34A8124CEE0A91A0B034AA97D6EAC PBOC_IMK_ENC           ...

  3. android/java 根据当前时间判断股票交易状态(未开盘 交易中 休市中 已收盘)

    /** * @param data yyyy-MM-dd HH:mm:ss 时间 * @return 未开盘 交易中 休市中 已收盘 */ public static String getSotckS ...

  4. 量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python)(转)

    量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python) 原文地址:http://blog.csdn.net/u012234115/article/details/728300 ...

  5. Java才是世界上最好的语言,Java在高频交易中替代C++

    高频交易 高频交易是指从那些人们无法利用的极为短暂的市场变化中寻求获利的计算机化交易,比如,某种证券买入价和卖出价差价的微小变化,或者某只股票在不同交易所之间的微小价差.在高频交易中,自动化应用程序每 ...

  6. Android中图片占用内存的计算

    Android中图片占用内存的计算 原文链接 http://blog.sina.com.cn/s/blog_4e60b09d01016133.html   在Android开发中,我现在发现很多人还不 ...

  7. DNA序列编码中Hairpin的定义和计算

    DNA序列编码中Hairpin的定义和计算 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 [1] 张凯. DNA计算核酸编码优化及算法设计[D]. 2008. [2] Shin, ...

  8. echo $[1 + 2] shell中 $[] 在bash中同$(()),用于算术计算

    shell脚本编写:echo $[ 11#8+1] 输出结果是几,为什么,怎么算来的?  摘自:https://zhidao.baidu.com/question/334766451.html   结 ...

  9. CSS中选择器优先级的权重计算

    CSS中选择器优先级的权重计算 先看一段代码,如下: a{ color: red; } #box a{ color: green; } [class="box"] a{ color ...

随机推荐

  1. pthread_join和pthread_detach的用法

    //从别处拷贝过来的,只作为自己查看方便,原作者不详,请谅解. 一:关于join join join是三种同步线程的方式之一.另外两种分别是互斥锁(mutex)和条件变量(condition vari ...

  2. arithmetic-slices

    https://leetcode.com/problems/arithmetic-slices/ public class Solution { public int numberOfArithmet ...

  3. distance field(占坑

    signed distance field https://kosmonautblog.wordpress.com/2017/05/09/signed-distance-field-rendering ...

  4. 创建CrawlSpider爬虫简要步骤

    创建CrawlSpider爬虫简要步骤: 1. 创建项目文件: e.g: scrapy startproject douyu (douyu为项目名自定义) 2. 进入项目文件: e.g: cd dou ...

  5. URLRewrite地址重定向的实现

    URLRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址.其优点有: (1)提高安全性,可以有效的避免一些参数名.ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规 ...

  6. 安装red5 1.0.1版本Java_home不能用Java7

    安装red5     1.0.1一直出现问题,安装顺利可以过,但是一访问老是报错. 用1.0之前的版本则没有问题.好一顿折腾,查看log发现问题出在tomcat 的nio上,查询这个问题有回复说是jr ...

  7. Hadoop 添加删除Slave

    Hadoop 添加删除Slave @(Hadoop) 在hdfs-site.xml文件中添加如下配置: <property> <name>dfs.hosts</name& ...

  8. 疯狂java学习路线图

  9. ffmpeg对rtmp的基本操作[转]

    ffplay和ffmpeg调用的库是一样的.我刚才试了一下,是可以播的.ffplay "rtmp://tsl.s1979.cutv.com:1935/cutvChannelLive/AxeF ...

  10. HipHop PHP简介(转)

    HipHop PHP是FaceBook的一个开源项目,它优化了FaceBook网站Web服务器的运行速度. HipHop 是一个源代码转换器.它将 PHP 代码转换为高度优化的 C++ 代码,然后再使 ...