Joh*_*nny 2 apdu smartcard javacard
我想从卡向主机发送一个长响应(1000+ 字节)。读者只有T=0。我有几个问题想知道是否有人知道:
祝一切顺利!
约翰尼
我的理解是 ExtendedLength 仅适用于 T=1,这是真的吗?
那不是真的。无论如何,ISO/IEC 7816-4 中没有规定此类限制。但是,该卡应在 ATR / EF.ATR 中指明对扩展长度的支持。读者可能不只是假设存在扩展长度(但如果您是唯一一个处理应用程序的人,则可以忽略这一点)。
如果是这样,是否有在 T=0 上发送长响应的最佳实践?
扩展长度有很多问题,不是所有读者都支持,Global Platform 不支持(最新版本可能,我没查过),Java Card 最多只支持 32Ki - 1 个字节。Android 仅在最新版本中默认启用了扩展长度支持,但您最好期望支持 NFC 的手机无法正确处理它。ISO/IEC 7816-4 将扩展长度规范弄得一团糟,尤其是在后来的版本中(2015 年以后)。
不幸的是,您经常受限于使用命令链或仅通过执行多个 READ BINARY 命令。后者绝对是最不容易出错的 - 但它很慢而且文件结束处理可能很棘手。
一种可能的解决方案是按块发送数据,状态码为 61xx。基本上,我会调用 APDU.sendBytesLong,然后用 61xx 抛出异常以指示有更多数据。但是抛出异常来表明有更多数据似乎很奇怪,即使这似乎符合标准。
这是命令链解决方案,正确。
是的,你不能在不抛出异常的情况下指示警告是相当愚蠢的。很好找到。但是您可以通过抛出异常来发送数据并生成状态字。可能最好保存状态字并在process方法结束时生成异常。