金融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. 二十四种设计模式:建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...

  2. scrapy-splash抓取动态数据例子八

    一.介绍 本例子用scrapy-splash抓取界面网站给定关键字抓取咨询信息. 给定关键字:个性化:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信息 ...

  3. AWK 怎么读取标准输入(STDIN)

    在 awk 系列中,我们将会看到几个例子,你可以筛选其他命令的输出代替从一个文件读取输入作为 awk 的输入.我们首先从使用 dir 命令开始,它类似于 ls 命令. 在第一个例子下面,我们使用 di ...

  4. 以JPanel为基础实现一个图像框

    代码: import java.awt.Graphics; import javax.swing.ImageIcon; import javax.swing.JPanel; public class ...

  5. java小游戏代码

    一. 需求分析 曾几何时,游戏是海洛因的代名词,让人与玩物丧志联系在一起.一度遭到社会反感和家长抵制.可是.随着互联网的发展,和游戏潜在优点被发现.游戏的价值開始逐渐被社会认可,人们開始接受.认识和了 ...

  6. MYSQL 问题

    MYSQL 问题 (1)mysql server has gone away 导数据时,如果脚本太大,会执行中断,这时需要修改最大允许包的大小: set global max_allowed_pack ...

  7. vue - static(.gitkeep)

    描述:git上传忽略的文件,与.gitnoignore一样.

  8. vc 获取函数名称真实地址

    首先写一个很简单的main函数: int main(){ printf("main的地址(?):%08x",main); } 单步调试,可得知 main函数的真实入口地址是:00b ...

  9. Hibernate开发环境搭建

    一.下载Hibernate包的下载 官网地址:http://hibernate.org/orm/ 下载版本:hibernate-release-4.3.11.Final 二.Hibernate jar ...

  10. Android 不同View ID相同

    转自:http://blog.csdn.net/program035/article/details/6905045 今天在写一段代码是,两个Activity的Button设置了相同的ID,竟然没有报 ...