smartcard - 如何从借记卡/信用卡智能卡中获取 PAN(主帐号)
问题描述
我想知道如何从借记卡/信用卡智能卡中获取 PAN(主帐号)。我使用 APDU 命令尝试使用 Maestro 借记卡,并以字节为单位获取数据,以 TLV 编码。EMV 规范说 PAN 在标签“A5”上,但我没有在该标签上识别它。
APDU 命令:
<<00 A4 04 00 07 A0 00 00 00 04 30 60
>>61 42
<<00 C0 00 00 42
>>6F 40 84 07 A0 00 00 00 04 30 60 A5 35 50 07 4D 41 45 53 54 52 4F 87 01 01 5F 2D 06 65 73 65 6E 70 74 9F 11 01 01 9F 12 07 4D 41 45 53 54 52 4F BF 0C 0F 9F 4D 02 0B 0A 9F 6E 07 08 62 00 00 30 30 00 90 00
解码数据:
6F File Control Information (FCI) Template
84 Dedicated File (DF) Name
A0000000043060
A5 File Control Information (FCI) Proprietary Template
50 Application Label
M A E S T R O
87 Application Priority Indicator
01
5F2D Language Preference
e s e n p t
9F11 Issuer Code Table Index
01
9F12 Application Preferred Name
M A E S T R O
BF0C File Control Information (FCI) Issuer Discretionary Data
9F4D Log Entry
0B0A
9F6E Unknown tag
08620000303000
90 Issuer Public Key Certificate
解决方案
APDU 命令:
<<00 B2 01 0C 00
>>6C 89
<<00 B2 01 0C 89
>>70 81 86 9F 42 02 09 37 5F 25 03 17 12 08 5F 24 03 21 12 31 5A 08 XX XX XX XX XX XX XX XX 5F 34 01 00 9F 07 02 FF C0 8C 27 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 9F 35 01 9F 45 02 9F 4C 08 9F 34 03 9F 21 03 9F 7C 14 8D 0C 91 0A 8A 02 95 05 9F 37 04 9F 4C 08 8E 0C 00 00 00 00 00 00 00 00 42 03 01 03 9F 0D 05 B0 50 BC 88 00 9F 0E 05 00 00 00 00 00 9F 0F 05 B0 70 BC 98 00 5F 28 02 08 62 90 00
其中 XX XX... 是以 TLV 编码的应用程序主帐号 (PAN)。
诀窍是知道要读取什么记录,它在哪里,因为它并不总是在同一个地方,这取决于智能卡。
有时是00 B2 01 0C 00
其他00 B2 02 14 00
和其他组合。
推荐阅读:使用 Java 从 EMV 芯片卡获取信息以及更多详细信息:EMV 支付系统集成电路卡规范书 3
推荐阅读
- python - 为什么我无法在熊猫中获得正确的掩码列
- data-structures - 将平衡二叉树复制到具有最小旋转的 AVL 树的最佳“顺序”遍历
- robot - 通用机器人 TCP/IP 通信:无法发送 crlf ("\r\n")
- python - 尝试在指定路径中制作自复制文件
- sql - User 和 UserInfo 之间的映射
- angular - Angular 9 库:从主入口点到辅助入口点的依赖关系
- python - 通过子进程 python 调用时,tesseract 不显示任何输出
- unit-testing - 在包装函数中对正确的库使用进行通用测试是不好的做法吗?
- linux - 更改 cgroup pid.max 值?
- xunit - 使用内存中的 EF Core 提供程序时,在单元测试期间无法获取 EF Core 日志