我正在尝试通过发送直接命令来使用 java 访问我的 ACR122u。奇怪的是我没有得到任何响应,也没有错误。这是我的代码:
final static int IOCTL_SMARTCARD_ACR122_ESCAPE_COMMAND = 0x003136B0;
.....
List<CardTerminal> terminals = null;
TerminalFactory factory = TerminalFactory.getDefault();
terminals = factory.terminals().list();
CardTerminal terminal = terminals.get(0);
Card card = terminal.connect("direct");
CardChannel channel = card.getBasicChannel();
byte[] commandAPDU = {(byte) 0xD4, 0x06, 0x63, 0x05, 0x63, 0x0D, 0x63, 0x38 };
byte[] responseAPDU = card.transmitControlCommand(IOCTL_SMARTCARD_ACR122_ESCAPE_COMMAND, commandAPDU );
System.out.println(bytesToHex(responseAPDU) + "...");
有谁知道造成这种情况的原因吗?
提前谢谢了!
最后,我有解决方案。如果其他人也遇到同样的问题,我会回答我自己的问题。
错误是我只在这里发送消息。和new CommandAPDU()
您已经定义了 Class、INS、P1、P2。除此之外,您不需要定义Lc
因为 javac 会为我们做这件事. With transmitControlCommand
你确实需要定义Lc
。因此,有了这些知识,新的(工作)代码是:
List<CardTerminal> terminals = null;
TerminalFactory factory = TerminalFactory.getDefault();
terminals = factory.terminals().list();
CardTerminal terminal = terminals.get(0);
Card card = terminal.connect("direct");
CardChannel channel = card.getBasicChannel();
//Read register
byte[] commandAPDU1 = {(byte)0xFF,0x00,0x00,0x00,0x08, (byte)0xD4, 0x06, 0x63, 0x05, 0x63, 0x0D, 0x63, 0x38 };
byte[] responseAPDU1 = card.transmitControlCommand(IOCTL_SMARTCARD_ACR122_ESCAPE_COMMAND, commandAPDU1 );
System.out.println(bytesToHex(responseAPDU1) + "...");
//Response: D5070707059000...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)