You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从磁条卡获取APDU命令并写入空白卡?求APDU入门指导

先理清核心误区:磁条卡≠APDU适用场景

APDU(Application Protocol Data Unit)是**IC智能卡(芯片卡)**的专属通信协议,磁条卡根本不使用APDU——磁条卡存储的是磁道1/2/3的明文/加密数据,读取靠磁头而非APDU命令。先确认你的卡是带芯片的IC卡,下面的内容才适用。

IC卡APDU读取+写入实操指南

1. 必备工具

  • USB智能卡读卡器:ACR122U、ACS ACR38这类平民款就行,支持PC/SC标准
  • 电脑工具:
    • pcsc_scan:快速识别读卡器和卡的基本信息
    • gscriptor/pyApduTool:可视化发送APDU命令
    • Python pyscard库:适合写脚本批量操作

2. 读取卡号的基础APDU操作

绝大多数IC卡(银行卡、门禁卡等)的卡号可以通过标准命令读取:

  1. 先发送选择应用命令(以PBOC金融卡为例,通用命令):
    00 A4 04 00 07 A0000000031010 00
    
  2. 再发送读取二进制数据命令,提取卡号字段(偏移和长度可能因卡调整):
    00 B0 00 00 10
    
  3. 卡返回的16进制数据转ASCII后,就是你要的卡号。

3. 提取完整APDU交互序列

要把卡内所有数据对应的APDU命令都导出来:

  • 用Wireshark抓取读卡器的USB通信流量,记录每一条发送的APDU命令和卡的响应
  • 或者用pyApduTool的日志功能,全程记录你读取卡数据时的所有命令
  • 把这些命令按执行顺序整理,就是你需要的"可复用APDU命令集"

4. 写入空白IC卡的注意事项

  • 空白卡必须和原卡同芯片型号、同应用规范(比如原卡是MIFARE Classic,空白卡也得是同类型)
  • 按提取的APDU命令逐条顺序发送给空白卡,注意:
    • 部分卡有写入保护,需要先发送解锁APDU(比如MIFARE卡的验证密钥命令)
    • 通用写入命令格式:00 D6 00 00 [数据长度] [待写入数据],参数要严格匹配原卡的写入逻辑

新手快速上手脚本示例

用Python pyscard写个简单的APDU发送脚本,快速体验:

from smartcard.System import readers
from smartcard.util import toHexString

# 连接第一个读卡器
reader = readers()[0]
conn = reader.createConnection()
conn.connect()

# 发送选择PBOC应用的APDU命令
apdu = [0x00, 0xA4, 0x04, 0x00, 0x07, 0xA0,0x00,0x00,0x00,0x03,0x10,0x10, 0x00]
response_data, sw1, sw2 = conn.transmit(apdu)

print(f"卡响应数据: {toHexString(response_data)}")
print(f"状态字(判断是否成功): {hex(sw1)[2:].upper()}{hex(sw2)[2:].upper()}")

内容的提问来源于stack exchange,提问作者mike ball

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:47:02