如何使用自定义键编写MifareClassic

时间:2012-10-31 09:06:50

标签: android nfc mifare

我需要找到一个用自定义密钥编写Mifare Classic 1 K标签的解决方案。我无法写它,我已经尝试了所有选项但不幸的是我一直得到错误“IOException:Transceive Failed”。

以下是我的代码段:

byte custom_key[]={
  (byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff
};

// 16 bytes of Data. Otherwise it was throwing IllegalArgumentException .
byte[] data="Hello world of N".getBytes();
getMfc().connect();

if(getMfc().authenticateSectorWithKeyA(4, custom_key)) {
  getMfc().writeBlock(3, data); // Here I receive IOException all the time.
} else {
  getMfc().close();
}

请在这方面帮助我。我需要用自己的密钥编写Mifare Classic 1 K标签。

2 个答案:

答案 0 :(得分:6)

您对扇区4进行身份验证然后尝试写入块3.块3位于扇区0中,因此总是会失败。尝试对扇区0进行身份验证。

BTW:请不要将随机数据写入扇区预告片(例如块3)。它可能会锁定该部门而无法恢复。

答案 1 :(得分:0)

如果我理解正确,问题是如何编辑扇区4中的块3 验证后,您尝试写入块3.但是:
块编号在每个块中不从0开始。扇区0具有块0-3,扇区1具有块4-7,依此类推。扇区4的块偏移量为4 * 4 = 16。所以你要写的块是第19块。

有一个可用的功能可以为您计算此偏移量。 sectorToBlock(4)产生16.
为了写入第4区的第3块,我将使用以下内容:
getMfc()。writeBlock(getMfc()。sectorToBlock(4)+3,data)

接受的答案只提供了让提问者无法理解0区以外的区块索引的替代方案。