2015-09-18 113 views
5

我想要实现的是将APDU命令发送到MIFARE Classic 1K卡以更改其A和B键。如何发送APDU到Mifare Classic 1k卡?

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

现在,我想将A键从默认值更改为其他值。我发现了一个解决方案在这里,在计算器(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资源管理器,它允许你将APDU发送卡。然后我读PCSC规范3.2.2.1.4加载密钥命令章并理解该命令可能应该是这样的:

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

但不幸的是JSmartCard工具失败,“命令不被允许(没有当前EF)”。

我做错了什么?我怎样才能改变钥匙?

+0

您是否尝试过使用RFIDIoT库? – Ellipticat

回答

4

首先,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读取;数据块cks只能使用密钥B写入;数据块可以与
  • GPB设置为69

为扇区0密钥A或B)被读取,将使用下面的写入命令:

FF D6 0003 10 001122334455 787788 69 66778899AABB 

请注意,可以不部分地更新该部门预告片,你总是必须构建和写出整个部门预告片。

+0

清晰准确的答案! – ManuelH

相关问题