C++ mifare卡上的APDU写块命令

C++ mifare卡上的APDU写块命令,c++,nfc,apdu,mifare,C++,Nfc,Apdu,Mifare,我一直在尝试将一些数据写入mifare经典卡。首先,我发送这两个返回90 00的命令: 加载Mifare键: FF 82 20 01 06 FF FF FF FF FF FF FF 验证: FF 86 00 03 05 01 00 05 60 00 现在我用这个命令向扇区0、块3和块4写入命令 APDU写入数据\u 1:FF D 00 03 16 APDU写入数据\u 1:FF D 00 04 16 // writedata1 in block 3 ... // if (nr

我一直在尝试将一些数据写入mifare经典卡。首先,我发送这两个返回90 00的命令:

加载Mifare键: FF 82 20 01 06 FF FF FF FF FF FF FF

验证: FF 86 00 03 05 01 00 05 60 00

现在我用这个命令向扇区0、块3和块4写入命令 APDU写入数据\u 1:FF D 00 03 16 APDU写入数据\u 1:FF D 00 04 16

      // writedata1 in block 3 ...
//
    if (nres == SM_SUCCESS)// &&
    //bAPDURes )
{
    nlenrcv = sizeof(btRcv);
    nlencmd = 0;
    
btCmd[nlencmd++] = 0xFF;                // CLA
btCmd[nlencmd++] = 0xD6;                // INS
btCmd[nlencmd++] = 0x00;                // P1, Mifare Block Number MSB
btCmd[nlencmd++] = 0x03;                // P2, Mifare Block Number LSB
btCmd[nlencmd++] = 16;              // Lc, Data Length
memcpy(btCmd + nlencmd, btWrite_1, 16);
nlencmd += 16;

nres = m_Smart.RFTransmit(DEV_INTERNALRF, nlencmd, btCmd, (DWORD*)&nlenrcv, btRcv_1);

// writedata2 in block 4 ...

if (nres == SM_SUCCESS)// &&
    //bAPDURes )
{
    nlenrcv = sizeof(btRcv);
    nlencmd = 0;

    btCmd[nlencmd++] = 0xFF;                // CLA
    btCmd[nlencmd++] = 0xD6;                // INS
    btCmd[nlencmd++] = 0x00;                // P1, Mifare Block Number MSB
    btCmd[nlencmd++] = 0x04;                // P2, Mifare Block Number LSB
    btCmd[nlencmd++] = 16;              // Lc, Data Length
    memcpy(btCmd + nlencmd, btWrite_2, 16);
    nlencmd += 16;

    nres = m_Smart.RFTransmit(DEV_INTERNALRF, nlencmd, btCmd, (DWORD*)&nlenrcv, btRcv_2);
但它不起作用
是因为APDU写错了吗?

当您处理伪APDU时,您指示读卡器硬件将其转换为卡能理解的命令,并且由于您没有指定所使用的读卡器的确切品牌和型号,因此很难提供帮助。我使用的是万能非接触式读卡器和MIFARE卡。。代码允许写入块2,但在进行此修改以写入块3和4时,它不起作用。在尝试写入块3(扇区0)和块4(扇区1)时,您似乎对块5(=扇区1)进行了身份验证。在执行读/写操作之前,您需要对正确的扇区进行身份验证。这是正确的APDU格式吗?CLA=FF INS=86 P1=00 P2=03(用于身份验证的块号)Lc=05(数据字段的长度)数据字段=Version+AddMSB+AddLSB+KeyId+KeyNumber Version=01 AddMSB=00 AddLSB=05(块号)KeyId=60/61(60表示keyA,61表示keyB)KeyNo=00(读卡器的键槽号)@MichaelRolandNo,P1和P2应为零,请参阅