Javax SmartCardIO奇怪的错误6700长度不正确

时间:2015-11-22 15:07:38

标签: java android smartcard apdu

我正在对一些我知道符合ISO7816-4标准的未知智能卡进行一些测试。我收集的卡片都来自同一个操作员,所有这些卡片都可以互换。

我一直通过Java SmartCardIO库和ACR122U阅读器向卡片发送APDU命令,并通过ISODEP库使用Android手机。

在我的Android设备上,我发送了以下apdu,一切正常,

tag.transceive(new byte[] {(byte)0x80, (byte)0x30, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00 })

10张牌中的10张都可以找到。

在我的桌面上,我有以下代码:

answer = channel.transmit(new CommandAPDU( new byte[] { (byte)0x80, (byte)0x30, (byte)0x03, (byte)0x00, (byte)0x00 } ));

这个代码适用于10个卡中的3个,其他7个我得到6700长度不正确的错误。对于剩下的7个,我必须使用这个代码,

answer = channel.transmit(new CommandAPDU( new byte[] { (byte)0x90, (byte)0x32, (byte)0x03, (byte)0x00, (byte)0x00,(byte)0x00, (byte)0x00 } ));

我也不能将此代码用于上述3张卡,我得到一个长度不正确的错误。

我无法弄清楚是什么问题,为什么要添加额外的2个空字节使其工作?我在Android设备上没有遇到这个问题,所有卡只能使用一个字符串。

1 个答案:

答案 0 :(得分:2)

由于所有这些指令属于专有范围,我对意义和案例(DECREASE?)不太自信,但假设它们是案例4,允许命令数据和响应。

所有APDU明显格式错误。如果没有命令数据,则不能指定LC = 0 。零也不能是LE,因为在没有LC的情况下,它被编码为一个字节(短)或3个字节(扩展长度)。附加两个零字节的工作意味着,您将成功地切换到扩展长度,

我建议参考ISO 7816-4章节命令响应对。