我想获得Mifare Ultralight NFC标签的UID.在Java中我有这个代码:
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
CardTerminal terminal = terminals.get(0);
Card card = terminal.connect("*");
System.out.println("card: " + card);
CardChannel channel = card.getBasicChannel();
ResponseAPDU answer = channel.transmit(new CommandAPDU(0xFF, 0xCA, 0x00, 0x00, 0x00));
byte[] uid = answer.getBytes();
Run Code Online (Sandbox Code Playgroud)
问题是我收到两个字节而不是UID.有什么问题?APDU是否正确?
假设我想对 Mifare Classic 进行身份验证。
我如何知道要发送到卡的 APDU 的确切类型?
例子。
这段代码:
bcla = 0xFF;
bins = 0x86;
bp1 = 0x0;
bp2 = 0x0; // currentBlock
len = 0x5;
sendBuffer[0] = bcla;
sendBuffer[1] = bins;
sendBuffer[2] = bp1;
sendBuffer[3] = bp2;
sendBuffer[4] = len;
sendBuffer[5] = 0x1; // Version
sendBuffer[6] = 0x0; // Address MSB
sendBuffer[7] = currentBlock;
if(keyradioButton->Checked==true) // Address LSB
sendBuffer[8] = 0x60; // Key Type A
else if(keynumberradioButton->Checked ==true)
sendBuffer[8] = 0x61; // Key Type B
sendBuffer[9] = keynumber; // …Run Code Online (Sandbox Code Playgroud) 使用ACR122U工具对Mifare 1K NFC标签进行身份验证时,总是会得到失败结果,但是我可以使用Android手机读取/写入此标签。
ACR122U Load Authentication Keys
< FF 82 00 00 06 FF FF FF FF FF FF
> 90 00
< Key Structure: 00 < Key Number: 00
< Key: FF FF FF FF FF FF
Load Authentication Keys Success
ACR122U Authentication
< FF 86 00 00 05 01 00 00 60 00
> 63 00
Operation failed
Run Code Online (Sandbox Code Playgroud) 正如标题所说; 是否有用于检索标签的UID的APDU命令?我正在使用Java,带有ACR122-u读卡器和javax.smartcardio.*包,我想从扫描仪上的标签中获取UID.smartcardio库可以发送CommandAPDU,但我需要弄清楚要发送的APDU.谷歌在这方面对我不是很友好,为我提供了数以千计的无用数据表......
任何帮助都会很棒:)