APDU 案例 2 响应太短

Posted

技术标签:

【中文标题】APDU 案例 2 响应太短【英文标题】:APDU Case 2 Response too short 【发布时间】:2017-03-29 11:01:49 【问题描述】:

我正在使用通过 USB 连接到 android 设备的 ACR39T-A3 智能卡读卡器。

首先我要发送这样的 APDU Case 2 命令。

                int offset = 0;
                List<byte[]> dataList = new ArrayList<>(8);

             while (true) 



                    if (!responseString.contains("90 00")) 
                        break;
                    


                    dataList.add(progress[0].response);




    int offsetStartInt = 0x7F & (offset >> 8);
    int offsetEndInt =  offset & 0xFF ;

    //SmartcardOS
    //T1
    byte[] apdu = new byte[]
            (byte) 0x00, //CLA
            (byte) 0xB0, //INS
            (byte) offsetStartInt, //P1
            (byte) offsetEndInt, //P2
            (byte) 0xff, //LE

    ;

     transmitApdu(apdu);
     offset += 256;

     

我正在尝试从智能卡获取证书。 证书可以大于 256,所以我需要发送多个。 但作为响应,我只得到 90 00 而不是多个证书。

有人可以帮我吗?我不明白它是如何与偏移量一起工作的。

【问题讨论】:

感谢您的回复。它使用了 255 的偏移增量。非常感谢 由于它有效,我将评论更改为答案。 【参考方案1】:

虽然我不认识你的 API(而且我认为 responseString 的填充有点太神奇了),但原则上它应该以这种方式工作。

由于您将 LE 指定为 0xFF,我建议您选择

改为将 LE 设置为零或 仅将偏移量增加 255。

如果您的 EF 还没有被写入,有些卡可能只返回 90 00。

【讨论】:

以上是关于APDU 案例 2 响应太短的主要内容,如果未能解决你的问题,请参考以下文章

响应式网页设计案例分享

APDU命令与响应格式

APDU命令与响应格式

APDU 响应 910B 对 DESFire EV2 卡意味着啥?

非接触式智能卡仅响应第一个 APDU 命令

若干优秀的响应式网页设计案例分析