gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:43:56 26 4
gpt4 key购买 nike

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

    req = new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid, 0x00);

这应该构造一个 case 4 APDU。为什么卡的 react 就像我遗漏了什么一样?

最佳答案

   req = new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid, 0x00);

This is supposed to construct a case 4 APDU. Why does the card respond as if I were missing something?

简短回答

使用aid, 0x100而不是aid, 0x00 .

长答案(最好喝点咖啡):

这是因为 Ne 之间的混淆和LeNe是可以返回到终端的最大字节数。 Ne是一个没有具体表示的数字。 Le然而 Ne编码以字节为单位的表示 .

现在对于 ISO/IEC 7816-4 有一个小技巧:Le如果 ISO 情况 1 或 3 命令没有响应数据 (RDATA),则不存在(无字节)。所以定义Le = 00表示“无响应数据”是虚假的。相反,7816-4 使用 Le = 00意思是Ne = 256 。同样,Le = 0000 (或 Le = 000000 )意味着 Ne = 65536 ,即 2^16。双字节和三字节编码仅用于扩展长度的 APDU。

正如您在 CommandAPDU constructor 中看到的那样但是你必须指定 Ne ,不是Le 。因此,您指定的内容与表示没有响应数据相同。因此,APDU 将不会被正确解释为 ISO 情况 4,并且命令将失败(在本例中,6700 正是您所期望的)。

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

<小时/>

请注意,许多协议(protocol)描述包括 Java Card API 都区分了 NeLe错误(顺便说一句,这已在 the Java Card API v3.0.5 中修复)。这有点奇怪,因为 7816-4 有很多很多问题,但这不是其中之一。已经说的很清楚了。

关于javax.smartcardio 案例 4 APDU 消失 - 6700 响应 - 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31052297/

26 4 0
文章推荐: excel - excel中使用sub排序,排序不正确
文章推荐: angularjs - 从 angularjs 中的服务调用 Controller 函数
文章推荐: ember.js - 如何选择单选按钮并选择 ember 集成测试选项?
文章推荐: AngularJs 和