转载:https://www.cnblogs.com/ttss/p/4364328.html

ARQC:authenticate request cryptogram,授权请求报文

ARPC:authenticate response cryptogram,授权响应报文

AC:application cryptogram,应用密文

AAC:application authenticate cryptogram,应用认证密文

TC:transaction certificate,交易证书

ATC:application transaction counter,应用交易计数器

ARC:authenticate response code,授权应答码

前提: 
1. 获得IC卡AC子密钥(应用子密钥),或者获得发卡行AC主密钥(应用主密钥)  本例假设卡片的应用主密钥为MDKAC,十六字节: 
MDKAC  = C4D689158AD9FB9D23105B91CE046D0E 
2. 已知IC卡卡号PAN(5A)及卡序列号(5F34) 
本例:  PAN = 6210220110002707355  卡号一般为19位,最后一位是校验位,  PAN ser =  01 ,卡序列号一般是一个字节,存储在tag5F34中

二、TC、ARQC及AAC的计算

a.首先需要取IC卡AC子密钥(应用子密钥),如果已经获得了IC卡AC子密钥(应用子密钥)则略过此步。

获取应用子密钥的方法:  用发卡行的应用主密钥===》分散===》IC卡的应用子密钥

用发卡行主密钥分散出IC卡AC子密钥。方法为使用发卡行主密钥,对PAN(卡号)的后14位(如果PAN不足14位前面补0)加PAN序列号(卡序列号,tag5F34)(共8B)和对此取反的8个字节连接得到的16字节数据,做3DES加密计算就得到IC卡AC子密钥(应用子密钥)。

如:  用MDKAC=C4D689158AD9FB9D23105B91CE046D0E    PAN = 62102 20110002707355  ,PAN ser =   01

对20110002707355 01 DFEEFFFD8F8CAAFE 做3DES加密得 B8A15DA5F7043C317D9FD8F8DFE2BD75(UDK)应用子密钥

(2011000270735501)  =》取反  =》( DFEEFFFD8F8CAAFE)

(这就是所谓的有应用主密钥分散得到应用子密钥的过程)

b.计算得到过程密钥:

用IC卡AC子密钥(应用子密钥),对交易计数器ATC做3DES加密:

1.在ATC前补6字节0x00,对ATC取反,并在前补6字节0x00,并连接成16字节的数据,作为3DES的加密数据

例 如:ATC = 03D3 则  链接后的数据为: 00000000000003D3 000000000000FC2C     (其中FC2C为03D3取反后的值,可以用计算器(程序员模式)验证)

2. 用IC卡的AC子密钥(应用子密钥)对如上数据做3DES加密得过程密钥:

如: 用UDK对00000000000003D3000000000000FC2C做3DES加密得到的结果即是:4A43440B2D932ACDC4E2776ED562EE43 (过程密钥 )

3.校验AAC、TC及ARQC

IC卡返回的55域数据为:      待校验的密文: 81 A9 DC 93 10 F8 88 56

授权金额:                     000000000000                                  9F0206

其它金额:                     000000000000                                  9F0306

国家代码:                     0156                                                9F1A02

终端验证:                     0000000000                                     9505

货币代码:                     0156                                                5F2A0

交易日期:                     000000                                            9A03

交易类型:                     00                                                   9C01

随机数:                        00000444                                        9F3704

AIP:                           7C00                                                 8202

ATC:                          03D3                                                9F3602

CVR:                          0380A800                                        9F1013

连接如上数据得:

000000000000 000000000000 0156 0000000000 0156 00000000 00000444 7C00 03D3 0380A800

用过程密钥对如上数据做MAC运算得到了AAC(应用认证密文)、TC(交易证书)或ARQC(授权响应报文):

AAC、TC或ARQC  =   81A9DC9310F88856 与IC卡返回的响应密文比较相等,校验成功!

三、ARPC的计算方式

a.取授权应答码(ARC)

授权应答码为服务器返回的两字节数据,本例假设为:“00”  则ARC = 0x30 0x30  (十六进制)

ARPC计算过程

1. 在ARC后补6个字节0x00,并和ARQC做异或运算  如:   3030 000000000000 异或(XOR) 81A9DC9310F88856  得 B199DC9310F88856

2. 使用过程密钥对异或结果做3DES加密运算就得到ARPC

过程密钥:4A43440B2D932ACDC4E2776ED562EE43 对B199DC9310F88856 做3DES加密运算得ARPC密文:84DD63A221F915CA(ARPC)

3. 命令(外部认证)  00 82 00 00 0A +ARPC(8B)+ARC(2B)

ARQC与ARPC的生成和校验方法的更多相关文章

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

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

  2. Eclipse用法和技巧三:自动生成Main方法2

    上一篇文章里面介绍了新建文件时候自动添加main方法,这里接着介绍自动联想main方法.       步骤一:输入"main” 步骤二:保持光标在上图位置,按ALT + /,再回车 上一篇文 ...

  3. Eclipse用法和技巧二:自动生成Main方法1

    刚开始编写java小程序,基本都要用到main方法.后期开发大一点的程序,也可以用main方法进行单元测试.总是编写main方法,感觉太无聊了,幸好Eclipse可以帮我们自动生成main方法.见图: ...

  4. Java的注释和Javadoc在eclipse生成的方法 – Break易站

    本文内容来自:Java的注释和Javadoc在eclipse生成的方法 – Break易站 1.  Java的注释 Java里有两种注释风格.下面这个写法是非常常见的 1 2 3 4 /*This i ...

  5. Core文件简单介绍及生成设置方法

    Core文件简单介绍及生成设置方法 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试.当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文 ...

  6. 针对myeclipse6.5无法自动生成toString方法

    public void getToStringSTR(){ Field[] fs = this.getClass().getDeclaredFields(); for (int i = 0; i &l ...

  7. SQL语句中生成UUID方法

    SQL语句中生成UUID方法为UUID() 生成带横线UUID: select UUID()                         形如:abaffaca-fd55-11e5-b3d0-d2 ...

  8. FastAdmin 一键 CRUD 生成时方法不存在的问题分析

    FastAdmin 一键 CRUD 生成时方法不存在的问题分析 有群友反馈 使用 一键 CRUD 生成时不成功. 我试了以下命令 php think crud -t test -u 1 是成功的. 再 ...

  9. Spring中使用事务搭建转账环境方法二 相对简便的注解方法 ——配置文件注入对象属性需要setter方法 注解方法,不需要生成setter方法

    XML配置文件代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

随机推荐

  1. Machine Learning in action --LogisticRegession 逻辑回归

    本系列主要参考<机器学习实战>,使用python3编译环境,实现书中的相关代码. 1.基本算法 关于梯度上升算法和随机梯度上升算法的选择: 当数据集较小时,使用梯度上升算法: 当数据集较大 ...

  2. MongoDB的客户端管理工具--nosqlbooster 查询工具使用

    连接我的MongoDB 看到这样 打开db1数据库里面user集合,看到user集合里面的数据,他会自带查询语句 看这里以tree方式显示 可以以table方式显示 还可以json方式显示 按照自己的 ...

  3. 6 jmeter元件的作用域与执行顺序

    元件的作用域 配置元件(config elements)会影响其作用范围内的所有元件.前置处理程序(Per-processors)在其作用范围内的每一个sampler元件之前执行.定时器(timers ...

  4. 006-优化web请求二-应用缓存、异步调用【Future、ListenableFuture、CompletableFuture】、ETag、WebSocket【SockJS、Stomp】

    四.应用缓存 使用spring应用缓存.使用方式:使用@EnableCache注解激活Spring的缓存功能,需要创建一个CacheManager来处理缓存.如使用一个内存缓存示例 package c ...

  5. 前端框架之Vue(7)-事件处理

    监听事件 可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码. 示例: <div id="example-1"> <butt ...

  6. vue-watch监听路由的变化

  7. 浪潮IOT知识点

    1 新增身份定义 以及 身份定义的属性表 要注意增加路由 2     '@trident/core'; 飘红,解决办法 import { TableSearchComponent } from '@t ...

  8. python字符串前面加u,r,b的含义

    转自:https://blog.csdn.net/u010496169/article/details/70045895 u/U:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串, ...

  9. Eclipse+GitHub 提交代码错误 -“rejected - non-fast-forward”

    Eclipse Push出现rejected - non-fast-forward错误 在 Push到服务器时有时会出现 rejected - non-fast-forward 错误,这是由于远端发生 ...

  10. glibc降级尝试失败-兼使用另一个版本的glibc

    https://cnodejs.org/topic/56dc21f1502596633dc2c3dc 这个介绍的是升级的情况.降级,网上说很难.因为用yum是无法降级安装的.我仿造升级的方式,make ...