在python中

时间:2016-12-26 04:18:50

标签: python rfid mifare

这是我的问题:我的RC522模块通过SPI连接到我的Pi2,我能够使用MFRC522-python和pi-rc522库读取所有[64个块/ 16个扇区]。此外,我能够编写和更改所有块(63块),除了我从ebay购买的中国Mifare 1K卡的Block 0(包括UID),它应该是Block 0 / UID可写。

问题是:使用可用的python库(如上所述),是否可以在中文可写的Mifare 1K卡上写入Block 0。

注意:当我收到卡时,扇区拖车访问位处于传输配置(FF 07 80 - > 001用于扇区尾部,000用于数据块),这意味着通常我可以更改数据块(包括Block 0)使用KeyA或KeyB,但我不能。我将访问位更改为(7F 0F 88 - > 000用于数据块)并使用KeyA / KeyB,它没有工作,并且块0保持不变。我还尝试使用KeyA或KeyB(78 77 88 - > 000表示数据块),结果相同。

再次,设置正确的访问位,我能够读取/写入除块0之外的所有其他块。

谢谢,A。

2 个答案:

答案 0 :(得分:2)

有两种类型的UID可写卡:

  1. Block 0可写卡:您可以随时写0块
  2. 后门卡
  3. 如果写入块0不起作用,您可能有一张后门卡: 要启用后门,您需要将以下序列发送到卡: (一切都是十六进制的)

    1. RC522>卡:50 00 57 cd(HLTA + CRC)
    2. RC522>卡:40(仅限7位)
    3. 卡> RC522:A(仅4位)
    4. RC522>卡:43
    5. 卡> RC522:A(仅4位)
    6. 然后您可以在没有身份验证的情况下写入块0。 如果它仍然不起作用,您的卡可能不是UID可更改。

      回答你的问题: Python库没有理由拒绝编写块0。 你的库可以写任何块,除了块0,这是你的卡拒绝写块。

      尝试写0时,你的卡会发回NACK还是什么?

答案 1 :(得分:0)

我正在尝试相同但在我的情况下,我正在使用Arduino和RFID-RC522编写器/阅读器和this library。在我的情况下,我解决了它修改UnbrickUid示例。我在我的情况下打开了库文件夹:“\ Documents \ Arduino \ libraries \ rfid-master \ src \ MFRC522Hack.cpp”并更改了缓冲区(第190行)。

默认代码为:

byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

您可以在此处将此十六进制数字更改为您需要的数字。请记住,4个第一个字节是UID(01,02,03,04),后面的一个是BCC(04)。因此,如果您更改块0,请小心相应地更改BCC。

修改后,运行“FixBrickedUID”示例,它将更改整个块0。