如何写入MIFARE Classic标签?

时间:2014-04-15 09:09:01

标签: android nfc ioexception mifare contactless-smartcard

如何写入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);
}

1 个答案:

答案 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进行写操作。