当前位置: 首页 > 知识库问答 >
问题:

从java智能卡APDU收到的奇怪数据?

法烨华
2023-03-14

我可以毫无问题地从智能卡发送大部分数据。我注意到由于某种原因,我总是需要删除APDU中的前6个字节才能获得真正的数据。

然而,当发送一个特定的数据时,很难知道数据在APDU中的位置。

这是Java智能卡模拟器的代码:

data = new byte[] {(byte)0x6302}; 
apdu.setOutgoing();
apdu.setOutgoingLength((short) data.length);
apdu.sendBytesLong(data, (short) 0, (short) data.length);

预计发送/接收的数据为:

{0x2}

但是,在中间件APDU中接收到的数据响应是:

响应Apdu.get数据():

{0x80,0x32,0x0,0x0,0x8,0x0,0x0,0x1,0x5c,0x6,0xf9,0x63,0x33,0x1,0x2,0x90,0x0}

我还尝试记录java卡模拟器发送的APDU;以下是数据:

SendAPDU()数据(apdu.getBuffer()):

{0x2,0x32,0x0,0x0,0x8,0x0,0x0,0x1,0x5c,0x6,0xf9,0x63,0x33,0x0,…(这一点之后的所有0x0)}

CDATA:5

有人能帮我理解为什么发送的数据(或在发送之前读取的数据)与实际发送的数据如此不同吗?是某种填充物吗?我怎样才能发送原始数据?

共有1个答案

濮赤岩
2023-03-14

将代码更改为:

data = new byte[] {(byte) 0x63, (byte) 0x02}; 
apdu.setOutgoing();
apdu.setOutgoingLength((short) data.length);
apdu.sendBytesLong(data, (short) 0, (short) data.length);

将发送数据字节{0x63,0x02}。

你在问题中提到的数据:

  1. APDU数据的响应为:
responseApdu.getData():
{0x80, 0x32, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x5c, 0x6, 0xf9, 0x63, 0x33, 0x1, 0x2, 0x90, 0x0}

表示命令数据为:{0x80、0x32、0x0、0x0、0x8、0x0、0x0、0x1、0x5c、0x6、0xf9、0x63、0x33、0x1} ,响应数据为:{0x2,0x90,0x0}

SendAPDU() data (apdu.getBuffer()):
{0x2, 0x32, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x5c, 0x6, 0xf9, 0x63, 0x33, 0x0, ..... (all 0x0 after this point)}
Offset CDATA: 5

表示将发送数据字节0x02(发送长度为1字节),SW 0x9000({0x90,0x00})将在该字节之后发送。传出时不使用偏移CDATA。APDU缓冲区中的其他数据字节是您的APDU命令,第一个字节被传出字节覆盖(这里只有1个字节,0x02)。

注意:过程APDU. sendBytesLong(数据,偏移量,长度):

1)、将带偏移量和长度的数据复制到APDU缓冲区;

2). 使用APDU缓冲区发送数据;

3).发送SW;

 类似资料:
  • 我使用ACR122U-A9读取智能卡,通过以下APDU,我可以获取UID和ATS: 使用NXP TagInfo应用程序(android),我可以看到一个包含我所需数据的十六进制表。使用什么APDU命令可以检索这些数据? 六边形表如下所示: [0000]中是我想要检索的数据。

  • 问题内容: 我已经编写了一个applet,并将其安装在智能卡中。但是我不知道如何在智能卡上读写数据? 从智能卡读取数据是否正确? 请告诉我如何使用javacard将数据写入智能卡。 问题答案: 我找到了解决方案。实际上我正在使用eclipse,因为其中安装了编辑器java卡插件。当我在智能卡上运行程序时,每次都会在以前的applet上安装最新的applet。要查看结果,我们可以使用pyapdu工具

  • 我正在尝试将小程序(.cap文件)安装到智能卡中。我读到可以使用APDU完成。我使用Netbeans创建了我的小程序,它的助手是//aid/9AE9BE4D27/53。 首先构建apdu,选择安装程序小程序: ; 然后构建将创建我的小程序的apdu(遵循此结构): 我开发了一个应用程序,可以使用。我想如果我发送正确的安装命令,我的。cap文件应安装在卡中。 有了这些信息,谁能帮我建立正确的apdu

  • 我使用Java卡开发工具包(Java卡3.0.2运行时)创建了一个小程序,我使用生成脚本APDU,然后我想用生成的APDU脚本文件运行,将小程序上传到通过USB连接到我的计算机的真正读卡器上的真正智能卡中。我运行以下命令: 但我犯了一个错误: 有可能实现我想要的目标吗?

  • 我已经使用了无需太多努力即可从智能卡读取序列号。然而现在我被指派在空白卡片上创建MF(没有它序列号就无法读取)。我正在根据ISO7816指南创建APDU命令,但无法创建正确的APDU命令,因为我的十六进制值被转换为错误的字节。 我有两个问题 1:命令APDU中的数据采用了错误的字节(标记为*)。 2: SW1和SW2返回为6A 80,这意味着数据栏中的参数是不正确的(我猜是因为负值,而将十六进制格

  • 我正在尝试将APDU命令发送到读卡器本身,而不是智能卡。我使用的测试命令打开和关闭射频场。 如果我第一次连接到智能卡,该命令将通过SCardTransmit发送。但一旦射频场关闭,卡就会断开连接,我无法发送另一个APDU来打开射频场。 基本上有什么方法可以在没有卡的情况下通过pc/sc发送APDU。我想在读卡之前配置读卡器的某些部分。 提前谢谢。 -----编辑----- 正如FPGA战士提到的,