【问题标题】:Error in reading and writing data on Mifare DESFire cardsMifare DESFire卡读写数据出错
【发布时间】:2017-04-12 11:47:38
【问题描述】:

我正在尝试使用 ISO 7816-4 APDU 命令在 Mifare DESFire 卡上读取和写入数据。我按照以下步骤操作:

  1. 使用{00,A4,04,00,07,D2,76,00,00,85,01,00} 选择应用程序。 我收到的回复是9100
  2. 然后我使用{00,A4,00,00,02,3F,00} 选择文件,得到的响应为9100
  3. 然后我尝试使用命令{00,B0,00,00,03} 读取文件,但代码6A86 出现错误。

现在我想知道在卡上读取和写入数据的确切命令。我想我仍然不明白读/写命令中 P1 和 P2 的含义。我已经尝试了许多其他组合,但我总是收到6A866982 等错误。

【问题讨论】:

    标签: nfc rfid mifare apdu contactless-smartcard


    【解决方案1】:

    我假设您在成功时收到状态字 9000。如果您在使用 ISO/IEC 7816-4 基本行业间命令 APDU 时确实收到9100,那么一定会发生一些非常奇怪的事情。 91xx 状态字只应在您使用 ISO/IEC 7816-4 包装命令集时返回(即,当命令 APDU 的类字节设置为 0x90 时)。

    让我们看看你目前在做什么:

    1. 你开始我选择 MIFARE DESFire ISO AID D2760000850100

      00 A4 0400 07 D2760000850100 这可确保卡处于 ISO/IEC 7816-4 成帧模式并自动选择 MF(主文件;即 PICC 级应用程序)。
    2. 然后,您再次(!)选择 MF(PICC 级应用程序):

      00 A4 0000 02 3F00 所以你现在与第 4 步之后的水平相同。
    3. 最后,您尝试使用 READ BINARY APDU 从当前选择的文件中从偏移量 0 开始读取 3 个字节:

      00 B0 0000 03 由于当前选择的文件是 MF,因此您无法从中读取二进制数据。 MF 没有数据部分。因此,卡报告错误代码6A86(“错误的参数 P1 和/或 P2”),因为它试图告诉您从 MF(当前选择的文件由P1 的高位为零)没有意义。

    因此,在读取二进制数据之前,您需要选择一个包含实际数据部分的基本文件 (EF),该文件甚至可能位于不同的应用程序(专用文件,DF)中。这可以通过显式发送 EF(以及,如有必要,DF)的 SELECT 命令或通过使用第一个读取二进制命令的 P1 中的短文件标识符隐式选择 EF 来完成。在后一种情况下,您可以将 P1 的高位设置为 1,以指示 P1 的剩余部分对短文件 ID 进行编码。在这两种情况下,您都需要知道要从中读取的文件和应用程序的文件/应用程序标识符。

    【讨论】:

    • 谢谢你的帮助 Michael短文件标识符。
    • 我阅读了关于 MF、DF 和 EF 的信息,但我现在的问题是我们需要先选择 MF,然后继续选择 DF 和 EF,或者我们可以直接选择 EF 进行读/写操作。而且在执行选择文件命令 {00,A4,00,00,02,3F,01} 时,我收到错误 x6A86,这意味着找不到文件。我也尝试使用许多其他文件编号,例如 3F02,3f10,3f11, 3f03 等。但在所有情况下我都会得到响应 x6A86。在运行选择文件命令之前我没有选择任何应用程序或目录。这是正确的做法吗?
    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多