我在Javacard上传了一个HelloWorld.cap文件,并通过“acr38卡工具”软件向卡片发送了一些APDU命令,并以ASCII码作为输出收到了 Helloworld!。但是当我使用opensc-tool发送相同的APDU命令时,我在输出中收到无效参数,而不是 HelloWorld! 有什么问题?
ACR38卡工具输出:
< 00 A4 04 00 0B 00
< 01 02 03 04 05 06 07 08 09 00 66
> 610B
< 00 C0 00 00 00 0B
> 62 79 62 79 65 20 57 6F 72 6C 64
> 9000
Opensc-tool输出:
C:\Program Files\OpenSC Project\OpenSC\tools>opensc-tool.exe -s 00:a4:04:00:0b:0
1:02:03:04:05:06:07:08:09:00:66
Using reader with a card: ACS CCID USB Reader 0
Sending: 00 A4 04 00 0B 01 02 03 04 05 06 07 08 09 00 66
Received (SW1=0x90, SW2=0x00)
C:\Program Files\OpenSC Project\OpenSC\tools>opensc-tool.exe -s 00:c0:00:00:00:0
b
Using reader with a card: ACS CCID USB Reader 0
Sending: 00 C0 00 00 00 0B
APDU transmit failed: Invalid arguments
答案 0 :(得分:2)
我认为,opensc-tool会在启动时隐式重置该卡。所以第一个命令的效果,i。即选择应用程序时,在发送第二个命令时会丢失。我会尝试下一步,在同一个opensc-tool调用中指定两个命令。
答案 1 :(得分:1)
00 C0 00 00 00 0B
不是有效的APDU。 ISO 7816-4 APDU(长度为1字节的字段)如下所示:
+----------+----------+----------+----------+----------+------------+----------+
| CLA | INS | P1 | P2 | Lc | DATA | Le |
| (1 byte) | (1 byte) | (1 byte) | (1 byte) | (1 byte) | (Nc bytes) | (1 byte) |
+----------+----------+----------+----------+----------+------------+----------+
仅当Lc
(Nc
字段的长度)大于0字节时, DATA
才会出现。 Le
仅在响应APDU中存在预期数据时才会出现。
由于您的APDU不包含DATA
字段,因此该字段不得包含Lc
字段。因此
00 C0 00 00 0B
(INS
= 0xC0
,预期响应长度为11个字节)或
00 C0 00 00 00
(INS
= 0xC0
,预期响应长度为256字节)将是接近您的&#34; APDU&#34;的有效APDU命令。