使用APDU命令序列获取芯片卡PAN或PAN序列:如何获取它们?

时间:2018-02-21 14:35:41

标签: nfc smartcard apdu

我有一个非接触式芯片卡(不是银行或SIM卡),我可以通过NFC频道进行互动(ISO14443,ISO 7816第4部分)。

我想从这张卡中得到的就是获取该卡的UID,这可以帮助我将一张卡与其他卡区分开来。据我所知,这是PAN值,我可以在标签'5A'下得到。

首先,我可以将此命令发送到卡

00:a4:04:00:0e:32:50:41:59:2e:53:59:53:2e:44:44:46:30:31:00

并获得具有AID值的肯定答案(SW:9000)。

所以,我有AID,我可以发送这样的命令

00:a4:04:00:LеnAID:<AID>:00

打开文件,在不同的Tag下读取基于TLV的信息,我是对的吗?

但是当我发送('5A' - PAN的标签)

00:CA:00:5A:00

我的反应不好 - &gt; 6E:00

所以,

1)我应该更改Class值(现在CLA = 00)吗?什么价值?

2)也许我必须更改READ RECORD(B0或B2或其他)的INS值,因为“内核使用AFL的值(即标记'94')发出一个或多个READ RECORD命令检索应用数据元素“,在我的情况下标签'5A'用于PAN。 如果是这样,获得PAN的完整工作流程应该是什么?

UPD。 当我发送

ff:ca:00:00:00

我收到了

6e:00

1 个答案:

答案 0 :(得分:1)

对于我来说未知的原因我无法在命令

上获得肯定答案
FF:CA:00:00:00

我得到了答案6E:00

但我找到了另一种获取卡信息的方法。我必须执行一个而不是一系列命令:

1)首先,我必须找出小程序的AID。如果您知道AID,则可以跳过此步骤(在我的情况下为2PAY.SYS.DDF)

00:a4:04:00:0e:32:50:41:59:2e:53:59:53:2e:44:44:46:30:31:00

2)然后选择申请

00 A4 04 00 AID-Lenth AID

3)之后我们获得处理选项

80 A8 00 00 02 83 00 00

4)和READ RECORD

00 B2 01 14 00

为解码TLV响应我使用此实用程序 - https://www.emvlab.org/tlvutils 作为回应,我不仅获得了5A标签,还获得了其他标签,现在我必须解析整个R-APDU以获取特定标签值。

是否有用于解析TLV响应的java-lib?