Tag: apdu

APDU读取文件java卡程序

我用netbeans制作了java卡经典applet 当我编程读取操作时,我检查APDU中的第一个字节是0x80然后第二个是0xB0然后从字节2和3获取我将从文件中读取的偏移量然后取字节数为从字节4读取 将APDU作为默认值 0x80 0xB0 0x00 0x03 0x60这从当前文件读取60个字节,以偏移号3开始 当我尝试这个命令时它返回错误Input data length != Lc around line 12 。 经过一些重试,我发现了问题 问题是编译器假设字节4是数据的长度,所以在我的命令中他等待60个字节 当我搜索时,我发现当INS=B0时,字节4并不意味着发送数据长度 我不知道为什么它这样做,当我尝试调试编译器时甚至没有进入过程函数。 我的脚本文件是 0x00 0xA4 0x04 0x00 0X06 0X87 0XF1 0X3F 0X5E 0X22 0X47 0x7F; 0x80 0xA4 0x00 0x00 0x02 0x3F 0x00 0x7F; 0x80 0xA4 0x00 0x00 0x02 0x50 0x15 0x7F; 0x80 0xA4 0x00 0x00 0x02 […]

连接到模拟器的Java卡失败

我正在尝试测试Java Card小程序以建立与模拟器(如cref)的连接: try { sckClient = new Socket(“localhost”, 9025); InputStream is = sckClient.getInputStream(); OutputStream os = sckClient.getOutputStream(); cad = CadDevice.getCadClientInstance(CadDevice.PROTOCOL_T0, is, os); } catch (Exception e) { System.out.println(“error”); return; } try { cad.powerUp(); } catch (IOException e) { e.printStackTrace(); } catch (CadTransportException e) { System.out.println(“error”); try { sckClient.close(); } catch (IOException e1) { e1.printStackTrace(); } […]

Java Card +相应的APDU中的En- / Decryption输出

我是Java Card的全部主题的新手,并试图查看一些代码示例以便更好地理解。 我在oracle论坛中找到了一个AES使用示例,但是在以下部分遇到了一些问题: private void doAES(APDU apdu) { byte b[] = apdu.getBuffer(); short incomingLength = (short) (apdu.setIncomingAndReceive()); if (incomingLength != 24) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); //perform encryption and append results in APDU Buffer a[] automatically cipherAES.init(aesKey, Cipher.MODE_ENCRYPT); cipherAES.doFinal(b, (short) dataOffset, incomingLength, a, (short) (dataOffset + 24)); cipherAES.init(aesKey, Cipher.MODE_DECRYPT); cipherAES.doFinal(b, (short) (dataOffset + 24), incomingLength, a, (short) (dataOffset + […]

使用java commandAPDU读取SLE4442智能卡中的写入数据?

我想在SLE4442智能卡上读写数据我有ACR38U-i1智能卡读卡器 对于写入,我使用此命令APDU byte[] cmdApduPutCardUid = new byte[]{(byte)0xFF, (byte)0xD0, (byte)0x40,(byte)0x00, (byte)4,(byte)6,(byte)2,(byte)6,(byte)2}; 并为读取数据 byte[] cmdApduGetCardUid = new byte[]{(byte)0xFF,(byte)0xB0,(byte)0x40,(byte)0x00,(byte)0xFF}; 两者都是执行并发送SW = 9000但没有一个数据接收响应APDU就像我写6262数据但它没有收到 我也在写入和读取命令之前使用Select命令 select命令是 byte[] cmdApduSlcCardUid = new byte[]{(byte)0xFF,(byte)0xA4,(byte)0x00,(byte)0x00,(byte)0x01,(byte)0x06}; 有没有人在SLE4442智能卡中读取和写入正确的java代码?

javax.smartcardio:如何向Desfire卡发送本机命令?

我正在创建一个通过PC / SC非接触式读卡器和javax.smartcardio API与Mifare DESFire卡通信的Java应用程序。 我设法定期发送ISO 7816 APDU(CLA,INS,P1-P2,Lc,Command数据,Le)。 我在Ridrix的博客上看到 ,DESFire卡(至少我使用的EV1版本)支持APDU和Native命令 ,其中大多数命令只有1个字节长。 例如,“ 获取版本 ”命令: Command: 60 Response: af 04 01 01 00 02 18 05 我使用SpringCard的PC / SC Diag程序( 可在此处 )测试了该命令,我得到了正确的响应。 但我无法使用javax.smartcardio发送此命令:此API似乎是为真正的 APDU创建的,因此不允许1字节长的命令。 这是我做的: public static void main(String[] args){ TerminalFactory factory = TerminalFactory.getDefault(); CardTerminals terminalList = factory.terminals(); try { CardTerminal ct = terminalList.list().get(0); ct.waitForCardPresent(0); Card […]

NFC阅读器“SELECT(通过AID)”APDU不会路由到Android设备

我有一台ACR122U NFC读写器连接到安装了ACR122驱动程序的Windows机器。 我尝试使用javax.smartcardio API将SELECT(通过AID)ADPU发送到我的Android设备(应该处于HCE模式)。 这是我的代码: TerminalFactory factory = TerminalFactory.getDefault(); List terminals = factory.terminals().list(); CardTerminal terminal = terminals.get(0); System.out.println(terminal.getName()); Card card = terminal.connect(“*”); CardChannel channel = card.getBasicChannel(); execute(channel, new byte[] { (byte) 0xFF, 0x00, 0x51, (byte) 195, 0x00}, card); execute(channel, new byte[] { (byte)0xFF, 0x00, 0x00, 0x00, 0x04,(byte)0xD4, 0x4A, 0x01, 0x00}, card); //InListPassiveTarget execute(channel, new byte[] […]

使用SCL010获取Mifare Ultralight的UID

我想获得Mifare Ultralight NFC标签的UID。 在Java中我有这个代码: TerminalFactory factory = TerminalFactory.getDefault(); List 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(); 问题是我收到两个字节而不是UID。 有什么问题? APDU是否正确?