如何写入MIFARE Classic标签?
我已编写此代码,但writeBlock
导致错误" java.io.IOException:收发失败"。
如何解决这个问题?
MifareClassic mfc = MifareClassic.get(mytag);
boolean auth = false;
mfc.connect();
auth = mfc.authenticateSectorWithKeyA(1,MifareClassic.KEY_DEFAULT);
if (auth) {
String text = "Hello, World!";
byte[] value = text.getBytes();
byte[] toWrite = new byte[MifareClassic.BLOCK_SIZE];
for (int i=0; i<MifareClassic.BLOCK_SIZE; i++) {
if (i < value.length) toWrite[i] = value[i];
else toWrite[i] = 0;
}
mfc.writeBlock(2, toWrite);
}
答案 0 :(得分:1)
首先,您要对错误的扇区进行身份验证。在这里,您使用密钥A对扇区1进行身份验证:
auth = mfc.authenticateSectorWithKeyA(1, MifareClassic.KEY_DEFAULT);
当您越过if (auth)
时,我认为使用KEY_DEFAULT
作为第1扇区的密钥A的身份验证是成功的。
但是,然后,您正在尝试写入块2,它位于扇区0:
mfc.writeBlock(2, toWrite);
当您对扇区1进行身份验证时,写入扇区0将失败。您只能写入您上次验证的扇区中的块。对于扇区1,这将是块4到7.请注意,如果您对扇区2进行身份验证并尝试写入块4(位于扇区1中),则会遇到同样的问题。
如果我正确阅读了您的帖子下面的评论,您还尝试对第1扇区进行身份验证并访问第4块,从而导致相同的错误。如果是这种情况,则扇区1的访问条件禁止对密钥A进行写操作。