获取 NXP MIFARE DESFire EV1 卡的 UID/serial 编号

Getting the UID/serial number of an NXP MIFARE DESFire EV1 card

我目前正在做一个项目,我想使用我的 Windows 10 phone 具有 NFC 功能来读取智能卡的 UID/serial 号码以查找智能卡的 ID人。我试图从中获取 UID/serial 号码的卡是 NXP MIFARE DESFire EV1。我正在寻找的 ID 印在卡上,我设法使用我朋友的 phone 和 Android 应用程序访问它,这意味着该号码可以访问,但我不知道如何访问。

我可以向卡发送 APDU 命令,但我不知道使用哪个命令来获取我正在寻找的 UID/serial 号码。

我需要向卡发送什么APDU命令来获取ID?我要查找的 ID 是 7 个字节长。

一般来说,检索非接触式卡的 anti-collision 标识符 (UID) 等参数在很大程度上取决于 reader 以及 reader 和您的应用程序之间的抽象层。例如,在 Android 上有一个简单的方法 getId() 来获取 NFC tag/contactless 智能卡的 anti-collision 标识符。

但是,对于 MIFARE DESFire,还有一种方法可以通过 APDU 获取该参数。您可以简单地发送一个 GET VERSION 命令来查询版本信息(以及卡 UID):

C-APDU: 90 60 0000 00
R-APDU: 04 01 YY 01 00 ZZ 05 91AF

C-APDU: 90 AF 0000 00
R-APDU: 04 01 01 01 04 ZZ 05 91AF

C-APDU: 90 AF 0000 00
R-APDU: XXXXXXXXXXXXXX UUUUUUUUUU VV WW 9100

XXXXXXXXXXXXXX 是卡的 UID(如果卡处于随机 anti-collision 标识符模式,则全为零)。

请注意,甚至存在用于 MIFARE DESFire 版本信息的解析器 here (as ThomasRS 在评论中指出)。