gpt4 book ai didi

apdu - 芯片 EMV - 为每张智能卡获取 AFL

转载 作者:行者123 更新时间:2023-12-01 08:47:38 24 4
gpt4 key购买 nike

继续:EMV Reading PAN Code

我正在使用 C 语言,所以我没有 Java 工具和自动解析 APDU 命令响应的所有函数。我想读取所有类型的智能卡。我必须解析 GET PROCESSING OPTIONS 的响应并获取每张卡的 AFL(访问文件定位器)。

我有三种不同情况的三张牌:

  • A) HelloBank:77 12 82 2 38 0 94 c 10 2 4 1 18 1 1 0 20 1 1 0 90
  • B) Paypal :77 12 82 2 39 0 94 c 18 1 1 0 20 1 1 0 28 1 3 1 90
  • C) PostePay:80 a 1c 0 8 1 1 0 18 1 2 0 90

案例A)

我有三种不同的 AFL:10 2 4 118 1 1 020 1 1 0所以我发送 00 B2 SFI P2 00 其中 SFI 是 10>>3 (10 是第一个 AFL 的第一个字节)并且 P2 是 SFI<<3|4 这样我得到了正确的 PAN 代码我的卡。

案例 B)

我有三种不同的 AFL:18 1 1 020 1 1 028 1 3 1。所以我发送 00 B2 SFI P2 00 以与案例 A 相同的方式构建,但我得到每个 AFL 的响应 6A 83。

案例 C)我有两个不同的 AFL: 8 1 1 0, 18 1 2 0 但我无法自动解析它们,因为之前的响应没有相同的 TAG。如果我使用那些 AFL 就可以了,我可以获得卡的 PAN 代码。

如何使用通用方法读取正确的 AFL,以及如何使用这些 AFL 发出正确的命令?

最佳答案

这里是AFL的解码:

您通常会得到 4 字节的倍数的 AFL。将您的完整 AFL 分成 4 个字节的 block 。让我们以 1 个 Chunk 为例:AABBCCDD

AA -> SFI(解码说明如下)

BB -> 此 SFI 下的第一条记录

CC -> 此 SFI 下的最后记录

DD -> 离线数据认证涉及的记录(暂不供您使用)

以你为例 10 02 04 01 18 01 01 00 20 01 10 00

block 是 10 02 04 01, 18 01 01 00, 20 01 10 00

10 02 04 01 -->取第一个字节 10 : 00010000 从 MSB 中取初始 5 位 --> 00010 表示 2 : 表示 SFI 2

Taking 2nd Byte 02 : SFI 2 下的第一条记录是 02

占用第 3 个字节 04:SFI 2 下的最后一条记录是 04

由于没用,所以不包括4字节解释

总结:SFI 2 包含记录 2 到 4

读取记录命令将如何形成:

APDU 结构:CLA INS P1 P2 LE

CLA 00

INS B2

P1 (Rec No)02 (SInce 在这个 SFI 2 初始记录中是 02)

P2 (SFI) SFI 02 : 以 5 位二进制数字 00010 表示 SFI,然后在末尾附加 100 : 00010100 : 十六进制 14所以 P2 是 14

LE 00

APDU 读取 SFI 2 Rec 2 : 00 B2 02 14 00

用于读取 SFI 2 Rec 3 的 APDU:00 B2 03 14 00

APDU 读取 SFI 2 Rec 4 : 00 B2 04 14 00

现在,如果您尝试阅读 Rec 5,由于此 Rec 不存在,在这种情况下您将获得 SW 6A83。

对所有 block 使用相同的过程来识别可用的记录和 SFI通过这个机制,你可以编写函数来解析 AFL

关于apdu - 芯片 EMV - 为每张智能卡获取 AFL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50157927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com