无法验证NTAG213
问题描述:
我正在使用ACR122U NFC读取器来密码保护NTAG213 NFC标签。我想我已经设法正确地设置了密码,但之后我无法验证并更改标签。我对认证的代码如下所示:无法验证NTAG213
#include <winscard.h>
#include <iostream>
#pragma comment(lib, "winscard.lib")
const char *ReaderName = "ACS ACR122 0";
unsigned Password = 0x12345678;
int main()
{
//Establish context
SCARDCONTEXT hContext;
DWORD SCard_Status1 = SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &hContext);
if(SCard_Status1 != SCARD_S_SUCCESS)
return 1;
//connect to the card
SCARDHANDLE hCardHandle;
DWORD Protocol;
DWORD SCard_Status2 = SCardConnect(hContext, ReaderName, SCARD_SHARE_SHARED, SCARD_PROTOCOL_T1, &hCardHandle, &Protocol);
if(SCard_Status2 != SCARD_S_SUCCESS)
{
SCardReleaseContext(hContext);
return 1;
}
SCARD_IO_REQUEST Request;
Request.dwProtocol = Protocol;
Request.cbPciLength = sizeof(SCARD_IO_REQUEST);
BYTE TxData[] =
{
0xFF, //CLA
0x00, //INS
0x00, //P1
0x00, //P2
0x08, //LC
0xD4,
0x40,
0x01,
0x1B, //PWD_AUTH (See data sheet)
Password,
Password >> 8,
Password >> 16,
Password >> 24,
};
BYTE RxData[254];
unsigned long RxLength = sizeof(RxData);
DWORD SCard_Status3 = SCardTransmit(hCardHandle, &Request, TxData, sizeof(TxData), NULL, RxData, &RxLength);
std::cout << "SCard_Status = " << SCard_Status3 << std::endl;
std::cout << "RxLength = " << RxLength << std::endl;
SCardDisconnect(hCardHandle, SCARD_EJECT_CARD);
SCardReleaseContext(hContext);
return 0;
}
这应该发送PWD_AUTH命令与PWD的NTAG213。如果密码错误,我预计会收到一个错误消息,如果密码正确,我希望收到一个错误消息。但之后SCard_Status为SCARD_S_SUCCESS,RxLength为0。如果我尝试写入标签,则会出现错误。
我无法找到任何示例显示如何执行此操作。任何人都可以看到我做错了什么?
答
我会自己回答这个问题。我设法使其通过改变TXDATA此工作:
BYTE TxData[] =
{
0xFF, //CLA
0x00, //INS
0x00, //P1
0x00, //P2
0x07, //LC
0xD4, 0x42, //InCommunicateThru
0x1B, //PWD_AUTH (See data sheet)
Password,
Password >> 8,
Password >> 16,
Password >> 24,
};
我发现命令InCommunicateThru(D4 42)作为用于InDataExchange(D4 40)在数据表中的PN532,它是NFC处理器的替换在ACR122U内部。
如果SCardTransmit返回“SCARD_S_SUCCESS”,则RxData应该是“9000”。 – vikky 2014-09-22 11:58:36
是的,但RxData不是写成RxLength为0. – 2014-09-22 12:08:57
如果RxData为空,这意味着在SCardTransmit.Con中存在一些问题,您发布了所有代码? – vikky 2014-09-22 12:20:29