转载: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. Github上Laravel开源排行榜Star数31-60名

    Github上Laravel开源排行榜Star数31-60名,罗列所有 Laravel 开源扩展包,含 Github Star 数量,下载数量和项目简介.默认排序是按Star数量从多到少来排 31.c ...

  2. Failed to load bundle(http://loaclhost:8081/index.bundle?platfrom=ios.....

    另外RN的创建的项目可能上架审核不太容易通过,祝你好运 1.可能当前同时运行多个项目,关闭一个项目就可以,或者重启 2.init 命令默认会创建最新的版本,而目前最新的 0.45 及以上版本需要下载 ...

  3. H5-FileReader实现图片预览&Ajax上传文件

    图片预览 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  4. Stylus的使用

    vue-cli项目安装使用stylus步骤:1. npm install stylus -D命令,在项目内安装stylus.(注意:命令结尾 -D 即是 --save-dev 的简写形式) 2.需要安 ...

  5. abap异常处理 , update module

    1:异常 https://www.cnblogs.com/rainysblog/p/6665455.html 2:update module https://www.cnblogs.com/cindy ...

  6. Mac charles 抓取https请求,安装证书后还是显示unknown

    https://blog.csdn.net/qq_23114525/article/details/81460840 1. 配置证书 2. 设置钥匙串信任 3. 设置手机代理 端口号需要对应设置的端口 ...

  7. DAX/PowerBI系列 - 参数表(Parameter Table) - 大客户分析(Top N)

    DAX/PowerBI系列 - 参数表(Parameter Table) - 大客户分析(Top N) 难度: ★☆☆☆☆(1星) 适用范围: ★★★☆☆(3星) 概况:此文为DAX/PowerBI系 ...

  8. Linux命令:lsof

    简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控 ...

  9. (转)Springboot日志配置(超详细,推荐)

    Spring Boot-日志配置(超详细) 更新日志: 20170810 更新通过 application.yml传递参数到 logback 中. Spring Boot-日志配置超详细 默认日志 L ...

  10. ES代替DB建模后的维护流程架构