在FMCOS CPU卡上建立简单的测试PBOC支付环境

2024-04-12 00:36

本文主要是介绍在FMCOS CPU卡上建立简单的测试PBOC支付环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文目的在于快速搭建一个简易的支付环境,方便进行电子钱包的圈存、消费测试。因此省略了许多数据文件及安全机制。

请勿将这个测试支付环境应用在生产系统中,否则可能带来极大的安全隐患。

建立简易的测试PBOC支付环境

在根目录(3F00)下建立应用目录3F01

80 E0 3F 01 0D 38 08 00 F0 F0 95 FF FF 11 22 33 44 55

选择应用目录3F01

00 A4 00 00 02 3F 01 00  

建立密钥文件

80 E0 00 00 07 3F 01 8F 95 F0 FF FF 

增加外部认证密钥

80 D4 01 00 0D 39 F0 F0 AA FF 11 22 33 44 55 66 77 88 

增加消费密钥

80 D4 01 00 15 3E F0 F0 00 01 3E 3E 3E 3E 3E 3E 3E 3E 11 22 33 44 55 66 77 88 

增加圈存密钥

80 D4 01 00 15 3F F0 F0 00 01 3F 3F 3F 3F 3F 3F 3F 3F 11 22 33 44 55 66 77 88 

增加DTK/TAC密钥

80 D4 01 00 15 34 F0 F0 00 01 34 34 34 34 34 34 34 34 11 22 33 44 55 66 77 88 

增加口令密钥(PIN)

80 D4 01 00 07 3A F0 EF AA FF 12 34 

建立交易记录文件0018

80 E0 00 18 07 2E 0A 17 F0 EF FF FF 

建立电子钱包文件0002

80 E0 00 02 07 2F 02 08 F0 00 FF 18 

简易的测试支付环境就此建立完毕。

对电子钱包进行圈存操作

读余额

Rdr: 80 5C 00 02 04
Tag: 00 00 00 00 [90 00] 命令执行成功 

可见目前余额为0。

验证口令(PIN)

Rdr: 00 20 00 00 02 12 34
Tag: [90 00] 命令执行成功 

对于电子钱包,圈存操作强制验证PIN。 读余额、消费操作可以不验证PIN。

圈存初始化

Rdr: 80 50 00 02 0B 【00】 【00 00 00 10】 【66 66 66 66 66 66】 10
Tag: 【00 00 00 00】 【00 00】 【00】 【01】 【4E 06 65 48】 【0D 39 AD BB】 [90 00] 命令执行成功

读卡器发送的有效数据依次为:圈存密钥标识、交易金额、终端机编号

卡片应答的有效数据依次为:旧余额、联机交易序号、密钥版本、算法标识、随机数、MAC1

过程密钥的计算

将随机数(4E 06 65 48)、联机交易序号(00 00)和填充字节(80 00)组成的完整数据4E 06 65 48 00 00 80 00,使用圈存密钥进行加密,得到“过程密钥”:3B 75 C7 9C FA 8C 23 27

MAC1的计算

将旧余额(00 00 00 00)、交易金额(00 00 00 10)、交易类型(02)和终端机编号(66 66 66 66 66 66)组成的完整数据00 00 00 00 00 00 00 10 02 66 66 66 66 66 66,使用“过程密钥”计算MAC,得到MAC1:0D 39 AD BB。

注:交易类型02表示电子钱包;01则表示电子存折。

圈存

Rdr: 80 52 00 00 0B 【20 24 04 11】 【21 21 21】 【09 7E 98 FE】 04
Tag: 【A8 02 86 3E】 [90 00] 命令执行成功

读卡器发送的有效数据依次为:交易日期、交易时间、MAC2

卡片应答的有效数据为:交易验证码(TAC)

MAC2的计算

将交易金额(00 00 00 10)、交易类型(02)、终端机编号(66 66 66 66 66 66)、交易日期(20 24 04 11)和交易时间(21 21 21)组成的完整数据,00 00 00 10 02 66 66 66 66 66 66 20 24 04 11 21 21 21,使用“过程密钥”计算MAC,得到MAC2:09 7E 98 FE

交易验证码(TAC)的计算

将新余额(旧余额00 00 00 00 + 交易金额00 00 00 10 = 00 00 00 10)、联机交易序号(00 00)、交易金额(00 00 00 10)、交易类型(02)、终端机编号(66 66 66 66 66 66)、交易日期(20 24 04 11)和交易时间(21 21 21)组成完整数据:00 00 00 10 00 00 00 00 00 10 02 66 66 66 66 66 66 20 24 04 11 21 21 21。

将DTK/TAC密钥的左右(高低)8字节进行异或,即34 34 34 34 34 34 34 34与11 22 33 44 55 66 77 88进行异或,得到计算TAC使用的密钥:25160770615243BC。用该密钥对前面得到的完整数据(00 00 00 10 00 00 00 00 00 10 02 66 66 66 66 66 66 20 24 04 11 21 21 21)计算MAC,得到TAC:A8 02 86 3E

再次读余额

Rdr: 80 5C 00 02 04
Tag: 00 00 00 10 [90 00] 命令执行成功

读交易记录

Rdr: 00 B2 01 C4 00
Tag: 00 01 00 00 00 00 00 00 10 02 66 66 66 66 66 66 20 24 04 11 21 21 21 [90 00] 命令执行成功 

这篇关于在FMCOS CPU卡上建立简单的测试PBOC支付环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/895616

相关文章

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议

SpringBoot基于沙箱环境实现支付宝支付教程

《SpringBoot基于沙箱环境实现支付宝支付教程》本文介绍了如何使用支付宝沙箱环境进行开发测试,包括沙箱环境的介绍、准备步骤、在SpringBoot项目中结合支付宝沙箱进行支付接口的实现与测试... 目录一、支付宝沙箱环境介绍二、沙箱环境准备2.1 注册入驻支付宝开放平台2.2 配置沙箱环境2.3 沙箱

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav