【问题标题】:How to send APDU to Mifare Classic 1k card?如何将 APDU 发送到 Mifare Classic 1k 卡?
【发布时间】:2015-12-16 00:47:08
【问题描述】:

我想要实现的是向 MIFARE Classic 1K 卡发送 APDU 命令以更改其 A 和 B 密钥。

我能够与卡建立连接并使用默认密钥 (FFFFFFFFFFFF) 来读取块 0 和块 1。我为此使用了 HID MifareSamples 应用程序。

现在,我想将 A 键从默认值更改为其他值。我在 stackoverflow (Mifare Change KEY A and B) 找到了一个解决方案,这表明我必须发送这个 APDU:

新密钥 A = 00 11 22 33 44 55 访问位未覆盖 密钥 B 未 用过(所以 FF FF FF FF FF FF)

=> 写入扇区尾部 00 11 22 33 44 55 FF 0F 00 FF FF FF FF FF FF FF

我找到了一个很好的工具 JSmartCard Explorer,它允许您将 APDU 发送到卡片。然后我阅读了 PCSC 规范 3.2.2.1.4 Load Keys Command 一章,了解到该命令应该是这样的:

FF 82 00 00 18 00 11 22 33 44 55 FF 0F 00 FF FF FF FF FF FF FF

但不幸的是,JSmartCard 工具因“不允许命令(无当前 EF)”而失败。

我做错了什么?如何更改密钥?

【问题讨论】:

  • 您是否尝试过使用 RFIDIoT 库?

标签: access-control mifare apdu contactless-smartcard pcsc


【解决方案1】:

首先,MIFARE Classic 卡不使用 APDU 命令。因此,您不会将 APDU 发送到卡,而是发送到读卡器(将它们转换为 MIFARE Classic 命令)。阅读器要处理的 APDU 命令通常以类字节FF 开头。

在 MIFARE Classic 卡中,每个扇区的密钥(A 和 B)和访问条件存储在扇区尾部(每个扇区的最后一个块)中。 MIFARE Classic 1K 卡有 16 个扇区,每个扇区有 4 个块。

因此,如果您想为扇区 0 设置密钥和访问条件,则需要将它们写入块 3(扇区 0 的最后一个块)。 PC/SC标准将存储卡的写命令(UPDATE BINARY)定义为:

FF D6 XXYY 10 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

其中XXYY是块地址,ZZ...是要写入块的数据。

扇区尾部的格式是(见this answer for further details):

<key A> | access bits | general purpose byte | <key B>

所以为了设置

  • 键 A = 00 11 22 33 44 55
  • 键 B = 66 77 88 99 AA BB
  • 访问位 = 787788(扇区尾部仅可使用密钥 B 写入;访问位/GPB 可使用密钥 A 或 B 读取;数据块仅可使用密钥 B 写入;数据块可使用密钥 A 或B)
  • GPB 设置为69

对于扇区 0,您将使用以下写入命令:

FF D6 0003 10 001122334455 787788 69 66778899AABB

请注意,您不能部分更新扇区预告片,您始终必须构建和编写整个扇区预告片。

【讨论】:

  • 清晰准确的答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多