基于PBOC电子钱包的圈存过程详解

基于pboc的电子钱包的圈存过程,供智能卡行业的开发人员参考

一. 圈存

首先终端和卡片有一个共同的密钥叫做圈存密钥:LoadKey   (Load即圈存的意思,unLoad,是圈提的意思)

假设LoadKey = 11223344556677888877665544332211

(密钥一般都是16字节的,圈存即往IC卡里存钱的意思)

在满足安全条件的情况下:

第一步:终端向卡片发送圈存初始化命令:

Apdu:  80        50   00  01   0B         01     00001000   001122334455

CLA    INS  P1   P2   LC   KeyIndex   交易金额      终端机编号

卡片返回16个字节的数据如下(不包括9000):

00000000     0000               02                00    11223344   2988AE5A

卡片余额      交易序号          密钥版本号   算法标识     随机数         MAC1

MAC1的计算过程如下:

1.计算过程密钥:SessionKey  (过程密钥又叫会话密钥,因为通信的过程即是建立了一个会话(session),而过程密钥是跟交易序号和圈存密钥相关的

InputData =  11223344     0000     8000  (8bytes)

随机数      交易序号    填充数据

LoadKey = 11223344556677888877665544332211

SessionKey = 3DES_Enypt(InputData, LoadKey) = 9B1D924E05595603

用LoadKey对InputData 做3DES加密

2.计算MAC1(4字节)

InputData1 = 00000000     00001000     01     001122334455

卡片余额         交易金额   交易类型     终端机编号

SessionKey = 9B1D924E05595603

MAC1 = MAC(InputData1  SessionKey )  =  2988AE5A

用SessionKey对InputData1做MAC运算得到MAC1

第二步:终端用同样的方法计算MAC1并验证卡片返回的MAC1是否正确,从而确认卡片是否合法。如果MAC1验证没有通过,终端会终止交易。如果MAC1验证通过,进行第三步。

第三步:终端计算MAC2

InputData2=00001000     01        001122334455     20111221     214822

交易金额   交易类型      终端机编号            交易日期      交易时间

SessionKey = 9B1D924E05595603  (在整个过程中,会话密钥,又叫过程密钥都是不变的)

MAC2 = MAC(InputData2  SessionKey )  =  3A845BF0

用SessionKey对InputData2做MAC运算

第四步:终端向卡片发送圈存命令:

Apdu:  80    52  00   00    0B  20111221      214822        3A845BF0

CLA   INS  P1   P2   LC   交易日期         交易时间        MAC2

第五步:卡片收到圈存命令后,用和终端一样的方式计算MAC2,并对终端发来圈存命令中的MAC2进行验证,如果MAC2验证没有通过,卡片会返回SW=9302(MAC错误),如果MAC2验证通过,则卡片余额加上交易金额作为卡片新的余额进行余额更新,交易记数器加1,并计算TAC返回给终端,TAC的计算过程如下:

卡片和终端还有一个共同的密钥TAC密钥:TACKey

假设TACKey = 00112233445566778899AABBCCDDEEFF

TACSessionKey=XOR(TacKey.Left(8),TacKey.Right(8)) =8888888888888888

TACKey的左右8个字节做异或运算

InputData3=00001000     0000     00001000      01     001122334455   20111221    214822

新余额       交易序号旧 交易金额     交易类型  终端机编号          交易日期       交易时间

TAC = MAC(InputData3, TACSessionKey) = 6314E5F5

TAC作为圈存命令的返回数据返回给终端,圈存交易到此就结束了,TAC作为清算的时候验证交易数据真伪和完整性的重要依据,连同交易记录一同保存在终端。

转载:http://www.cnblogs.com/ttss/p/4280376.html

基于PBOC电子钱包的圈存过程详解相关推荐

  1. 基于PBOC电子钱包的圈存过程详解A

    基于PBOC电子钱包的圈存过程详解 基于pboc的电子钱包的圈存过程,供智能卡行业的开发人员参考 一. 圈存 首先终端和卡片有一个共同的密钥叫做圈存密钥:LoadKey (Load即圈存的意思,unL ...

  2. 基于pboc的电子钱包的圈存过程

    基于pboc的电子钱包的圈存过程,供智能卡行业的开发人员参考 一. 圈存 首先终端和卡片有一个共同的密钥叫做圈存密钥:LoadKey 假设LoadKey = 112233445566778888776 ...

  3. 电子钱包的圈存——java card开发第四篇

    隔了好久没更新了,前一篇创建好了文件系统,那现在就可以实现使用电子钱包了,这篇首先讲电子钱包的圈存,其实就是存款进去的意思. 首先看一个灰常重要的流程图: 首先,终端(连着主机,他们的另一边是卡片)给 ...

  4. python人脸识别opencv_Python基于Opencv来快速实现人脸识别过程详解(完整版)

    前言 随着人工智能的日益火热,计算机视觉领域发展迅速,尤其在人脸识别或物体检测方向更为广泛,今天就为大家带来最基础的人脸识别基础,从一个个函数开始走进这个奥妙的世界. 首先看一下本实验需要的数据集,为 ...

  5. 怎么把HTML网页重构为VUE,基于vue cli重构多页面脚手架过程详解

    官方提供的项目生成工具vue-cli没有对多页面webApp的支持,但是在实际的项目中,我们需要这样的脚手架,参考了很多大牛的方法,这里提供了一种我的单页面脚手架转换为多页面脚手架的方案,供大家参考. ...

  6. python制作二维码_基于Python生成个性二维码过程详解

    一.问题描述 通过调用MyQR模块来实现生成个人所需二维码. 安装: pip install myqr 二.代码实现 1.普通二维码 from MyQR import myqr # 普通二维码 myq ...

  7. opencv python考勤_Python基于Opencv来快速实现人脸识别过程详解(完整版)

    前言 随着人工智能的日益火热,计算机视觉领域发展迅速,尤其在人脸识别或物体检测方向更为广泛,今天就为大家带来最基础的人脸识别基础,从一个个函数开始走进这个奥妙的世界. 首先看一下本实验需要的数据集,为 ...

  8. python模块cv2人脸识别_Python基于Opencv来快速实现人脸识别过程详解(完整版)

    前言 随着人工智能的日益火热,计算机视觉领域发展迅速,尤其在人脸识别或物体检测方向更为广泛,今天就为大家带来最基础的人脸识别基础,从一个个函数开始走进这个奥妙的世界. 首先看一下本实验需要的数据集,为 ...

  9. 电子现金跨行圈存基础知识及常见问题

    (一)什么是电子现金 电子现金是基于金融IC卡借记和贷记应用实现的小额支付功能.为适应在脱机环境等条件下或快速支付等场合的使用管理,电子现金的交易规则参照日常使用的现金,具备不记名.不挂失.不计息的特 ...

最新文章

  1. 一个爬虫的故事:爬虫兄弟要活不下去了!!!
  2. 5.4 异步TCP编程(一)
  3. 淘宝flink和storm书籍调研
  4. 用android ndk编译ffmpeg,AndroidNDK交叉编译FFMPEG
  5. 静态方法和实例方法(mark)
  6. i5+GT730+B85安装OSX10.10.5 (Yosemite Install(14F27).cdr)
  7. 排序-概述,插入排序(180602更新完毕)
  8. Android 系统(201)---Android 自定义View实战系列 :时间轴
  9. -创建日期和时间数组--提取年月日-显示格式
  10. Java前端自定义错误信息封装_SpringBoot2.3定制错误页面的方法示例
  11. python论文用到的外文参考文献_论文外文文献怎么找?
  12. 联想计算机安装系统,联想计算机重新安装系统的详细步骤?
  13. 6.Alarm 闹钟服务
  14. 自动化测试设计模之PO(PageObject)
  15. 第0讲:树莓派是什么?能做什么?
  16. 计算机1101与0100逻辑加,算术加和逻辑加分别什么意思
  17. 中断系统应用实例(1)用定时器T1工作方式1控制两个LED以不同周期闪烁
  18. MVC4 过滤器学习
  19. 线性代数考研笔记(二)
  20. 「极客中心」www.geekzl.com网站上线了

热门文章

  1. 使用bat文件清除LaTeX编译后的中间文件
  2. 很好的社交文章-如何在酒桌上较快地与陌生人建立起关系?
  3. java多线程学习一、线程介绍、线程创建的3种方式、lambda创建方式、线程状态、线程示例:12306买票和银行取钱
  4. 梳理学习Kotlin,when表达式的用法
  5. 创建型:Java单例模式
  6. Excel表格归一化,保留几位小数并四舍五入
  7. vue+django智能点餐系统
  8. 短视频的利与弊——今抖云创
  9. 08- 抽象类和接口
  10. 凸优化学习补充知识(一)——矩阵的1/2次方