C++ mifare卡上的APDU写块命令
我一直在尝试将一些数据写入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 16C++ 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
// 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应为零,请参阅