1

我正在使用Mifare 1k卡和acr1252读卡器;我正在开发使用visual c++Winscard图书馆。

我已经成功地使用以下代码读取了单个块:

// Read binary blocks
// Class: FF
// INS: B0
// P1: 00
// P2: the starting block number
// Le: length to read (multiple of 16)
BYTE    ReadBinary[] = { 0xFF, 0xB0, 0x00, 0x00, 0x10 };

BYTE readRes[256] = { 0 };
DWORD lenRead = sizeof(readRes);

SCardTransmit(hCard, SCARD_PCI_T1, ReadBinary, sizeof(ReadBinary), NULL, readRes, &lenRead)

此函数调用返回SCARD_S_SUCCESSreadRes包含块值 +SW1SW2带值0x90 0x00(成功)

我要做的是使用相同的函数读取 2 个连续的内存块(即扇区 0 的块 0 和块 1),仅更改 apdu 命令:

ReadBinary[] = { 0xFF, 0xB0, 0x00, 0x00, 0x20 }; 
// Last byte changed to read 2 blocks

但不起作用:返回状态仍然存在SCARD_S_SUCCESS,但读取的数据仅包含SW1SW2带有值0x63 0x00(错误)。

带有卡的 AFAIKMifare 1k可以读取一个扇区的前 3 个块,但所有尝试读取超过一个扇区的读取测试都会因该错误而失败。

我错过了什么吗?

4

0 回答 0