APDU从MIFARE DESFire获取UID?

问题描述 投票:1回答:1

我是APDU的新手。我阅读了DESFire的数据表。根据它,我们有:

CLA  = 0x90     
INS  = DESFire CMD Code                                            
P1   = 0x00        
P2   = 0x00
LC   = Length of wrapped Data    
data = DESFire command parameter(s) 
LE   = 0x00

我想获得DESFire UID,但我无法为此创建命令APDU。任何人都能引导我走向正确的方向吗?我创建了这个APDU,但我不确定它是否正确:

byte[8] cmd_apdu_getUID_part1= {0x90 , 0x93 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00};

我不明白像LC这样的参数的概念,我找不到用于获取UID的INS。对于UID的第1部分是0x93 ox20,对于UID的第2部分是0x95 0x20吗?

uniqueidentifier mifare apdu smartcard-reader contactless-smartcard
1个回答
7
投票

命令9x 20是较低的ISO 14443-3协议的一部分,并在卡的防冲突和激活期间使用。另一方面,APDU在更高的协议层上交换,并且仅在激活卡之后。因此,您不能在APDU中使用这些命令代码。

如何从DESFire(EV1)卡获取UID取决于您实际想要获得的ID类型:

  • 获取在防冲突阶段实际使用的UID:这取决于您使用的读取器(以及可能的设备平台)。例如,符合PC / SC标准的非接触式智能卡读卡器通常允许使用PC / SC特定APDU读取当前所选卡的防冲突标识符 FF CA 00 00 xx (其中xx00或UID的预期长度,因为DESFire通常是0407)。
  • (仅限DESFire EV1)如果未激活卡的随机UID功能,则获取卡的UID:您需要使用GetVersion command。您需要使用CLA字节0x90来指示包装的本机命令,将INS设置为命令代码0x60,Lc和DATA将不存在: 90 60 00 00 00 答案看起来像 <7 response data bytes> 91 AF 其中状态代码91 AF表示可以使用命令代码设置为0xAF获得更多数据。所以你必须发送另一个命令: 90 AF 00 00 00 答案会(再次)看起来像 <7 response data bytes> 91 AF 所以你必须发送另一个0xAF命令。然后你会得到一个表格的答案: <14 response data bytes> 91 00 响应数据的最后7个字节包含UID。有关如何解析收到的数据,请参阅parseGetVersion()
  • (仅限DESFire EV1)如果卡的随机UID功能被激活,则获取卡的UID:这要复杂得多。您首先需要对卡进行身份验证。只有这样你才能使用GetCardUID command来检索实际的卡片UID。这个命令看起来像 90 51 00 00 00 答案看起来像 <UID (encrypted)> 91 00
© www.soinside.com 2019 - 2024. All rights reserved.