Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.smartcardio案例4 APDU消失-6700响应-警告_Java_Smartcard_Apdu - Fatal编程技术网

javax.smartcardio案例4 APDU消失-6700响应-警告

javax.smartcardio案例4 APDU消失-6700响应-警告,java,smartcard,apdu,Java,Smartcard,Apdu,使用javax.smartcardio类进行智能卡编程时,我遇到了一个持续的错误——当代码看起来很好时,从卡中返回6700(无效长度)和类似的错误代码。示例代码: req = new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid, 0x00); 这是为了构造一个案例4 APDU。为什么卡片的反应好像我遗漏了什么 这是为了构造一个案例4 APDU。为什么卡片的反应好像我遗漏了什么 简短回答 使用aid,0x100代替aid,0x00 详细回答(最好喝点咖

使用javax.smartcardio类进行智能卡编程时,我遇到了一个持续的错误——当代码看起来很好时,从卡中返回6700(无效长度)和类似的错误代码。示例代码:

    req = new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid, 0x00);
这是为了构造一个案例4 APDU。为什么卡片的反应好像我遗漏了什么

这是为了构造一个案例4 APDU。为什么卡片的反应好像我遗漏了什么

简短回答 使用
aid,0x100
代替
aid,0x00

详细回答(最好喝点咖啡): 这是因为
Ne
Le
之间存在混淆
Ne
是可以返回到终端的最大字节数
Ne
是一个没有特定表示的数字
Le
然而是
Ne
的编码或字节表示

现在对于ISO/IEC 7816-4有一个小技巧:
Le
在没有响应数据(RDATA)的ISO案例1或3命令中不存在(没有字节)。因此,将Le=00定义为“无响应数据”是错误的。7816-4使用
Le=00
表示
Ne=256
。类似地,
Le=0000
(或
Le=000000
)表示
Ne=65536
,即2^16。双字节和三字节编码仅用于扩展长度APDU

正如您在中所看到的,但是您必须指定
Ne
,而不是
Le
。因此,您指定的内容与表示没有响应数据相同。因此,APDU将不能正确解释为ISO案例4,并且命令将失败(正确地说,在这种情况下,
6700
正是您应该期望的)

所以只需指定您期望的字节数。如果该值大于256,则需要扩展长度APDU(或命令链接,但这本身就是一个主题)
Ne<0
Ne>64Ki
当然不受支持



请注意,许多协议描述(包括Java卡API)在
Ne
Le
之间的区别是错误的(顺便说一下,这一点已经得到了修复)。这有点奇怪,因为7816-4有很多问题,但这不是其中之一。它的指定非常清楚。

卡响应有哪些类似的错误代码?您能说得更具体些吗?
aid
数组中有什么?你能多发一点你的代码吗?@vojta:除了你知道卡片外,你能从AID数组的内容中分辨出什么细节?AID太短,AID太长,数组中的数据因为一个错误而不正确。。。我不知道…@vojta:类似的错误代码:“0x6c00错误长度”
   req = new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid, 0x00);