ARQC与ARPC的生成和校验方法
转载: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的生成和校验方法的更多相关文章
- 金融IC卡 ARQC和ARPC计算方法和实例(转)
假设发卡行的IC卡应用密钥如下: PBOC_IMK_AC F0C34A8124CEE0A91A0B034AA97D6EAC PBOC_IMK_ENC ...
- Eclipse用法和技巧三:自动生成Main方法2
上一篇文章里面介绍了新建文件时候自动添加main方法,这里接着介绍自动联想main方法. 步骤一:输入"main” 步骤二:保持光标在上图位置,按ALT + /,再回车 上一篇文 ...
- Eclipse用法和技巧二:自动生成Main方法1
刚开始编写java小程序,基本都要用到main方法.后期开发大一点的程序,也可以用main方法进行单元测试.总是编写main方法,感觉太无聊了,幸好Eclipse可以帮我们自动生成main方法.见图: ...
- Java的注释和Javadoc在eclipse生成的方法 – Break易站
本文内容来自:Java的注释和Javadoc在eclipse生成的方法 – Break易站 1. Java的注释 Java里有两种注释风格.下面这个写法是非常常见的 1 2 3 4 /*This i ...
- Core文件简单介绍及生成设置方法
Core文件简单介绍及生成设置方法 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试.当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文 ...
- 针对myeclipse6.5无法自动生成toString方法
public void getToStringSTR(){ Field[] fs = this.getClass().getDeclaredFields(); for (int i = 0; i &l ...
- SQL语句中生成UUID方法
SQL语句中生成UUID方法为UUID() 生成带横线UUID: select UUID() 形如:abaffaca-fd55-11e5-b3d0-d2 ...
- FastAdmin 一键 CRUD 生成时方法不存在的问题分析
FastAdmin 一键 CRUD 生成时方法不存在的问题分析 有群友反馈 使用 一键 CRUD 生成时不成功. 我试了以下命令 php think crud -t test -u 1 是成功的. 再 ...
- Spring中使用事务搭建转账环境方法二 相对简便的注解方法 ——配置文件注入对象属性需要setter方法 注解方法,不需要生成setter方法
XML配置文件代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
随机推荐
- 中文全文检索讯搜xunsearch安装
Xunsearch (迅搜)是一套免费开源的专业中文全文检索解决方案,简单易用而且 功能强大.性能卓越能轻松处理海量数据的全文检索.它包含后端索引.搜索服务程序和前端 脚本语言编写的开发工具包(称之为 ...
- 一行js弹窗代码就能设计漂亮的弹窗广告
接到一个设计需求,要求xmyanke在网站右侧挂一个弹窗广告宣传最近的活动,找了半天都没看到合适的,自己鼓捣了一行js弹窗代码就能设计漂亮的弹窗广告,来瞧一下,欢迎拍砖提意见,js弹窗广告代码如下: ...
- UE4程序及资源加密保护方案
UnrealEngine4外壳加密 . Virbox Protector 解决代码反汇编和反dump代码,解决软件盗版与算法抄袭. 虚幻引擎4是由游戏开发者为开发游戏而制作的.完整的游戏开发工具套件. ...
- react 首屏加载优化
react 首屏加载优化,原本是在入口HTML文件中加载loading动画,但是部署在测试环境上的时候一直无法显示loading的部分,也是奇怪了,我们测试环境的部署一直跟本地的都不太一样,内外网的转 ...
- mysql 1,2,3 关联查询出数字代表的具体意思
建表 TEST1 CREATE TABLE `TEST1` (`ID` int(11) NOT NULL,`IID` varchar(200) DEFAULT NULL,PRIMARY KEY (`I ...
- api-gateway-engine知识点(2)
GroupVersion实现engine本地缓存 package com.inspur.cloud.apigw.engine.cache; import java.util.Map;import ja ...
- (转)Java静态内部类的实例化问题
最近遇到的一个问题,记录一下. 静态内部类可以被实例化! 1.首先在外部类中的static方法中不能使用普通内部类,因为内部类必须要与外部类建立关联才能使用,可以说是同生共死. 2.我在编码过程中,需 ...
- [LeetCode] 744. Find Smallest Letter Greater Than Target_Easy tag: **Binary Search
Given a list of sorted characters letters containing only lowercase letters, and given a target lett ...
- iOS库
https://medium.com/app-coder-io/33-ios-open-source-libraries-that-will-dominate-2017-4762cf3ce449#.i ...
- seq2seq和attention应用到文档自动摘要
一.摘要种类 抽取式摘要 直接从原文中抽取一些句子组成摘要.本质上就是个排序问题,给每个句子打分,将高分句子摘出来,再做一些去冗余(方法是MMR)等.这种方式应用最广泛,因为比较简单.经典方法有Lex ...