gpt4 book ai didi

smartcard - Java 卡 : Send long response with T=0

转载 作者:行者123 更新时间:2023-12-05 09:15:03 26 4
gpt4 key购买 nike

我想从卡向主机发送一个长响应(1000 字节以上)。读者只有T=0。我有几个问题想知道是否有人知道:

  1. 我的理解是 ExtendedLength 仅适用于 T=1,这是真的吗?
  2. 如果是这样,是否有关于在 T=0 上发送长响应的最佳实践?
  3. 一种可能的解决方案是按 block 发送数据,状态代码为 61xx。基本上,我会调用 APDU.sendBytesLong,然后抛出 61xx 异常以指示有更多数据。但是抛出异常表示有更多数据似乎很奇怪,即使这样似乎也符合标准

祝一切顺利!

强尼

最佳答案

My understanding is ExtendedLength only works on T=1, is this true?

事实并非如此。无论如何,ISO/IEC 7816-4 中没有规定此类限制。但是,该卡应在 ATR/EF.ATR 中表明支持扩展长度。读者可能不会假设存在扩展长度(但如果您是唯一一个处理该应用程序的人,您可以忽略这一点)。

If so, is there best practice on sending long response on T=0?

extended length问题很多,不是所有读者都支持,Global Platform不支持​​(最新版本可能,我没查),Java Card最多只支持32Ki - 1 bytes。 Android 仅在最新版本中默认启用了扩展长度支持,但您最好期望支持 NFC 的手机无法正确处理它。 ISO/IEC 7816-4 将扩展长度规范搞得一团糟,尤其是在后来的版本中(2015 年起)。

不幸的是,您经常被限制使用命令链接或仅仅通过执行多个 READ BINARY 命令。后者绝对是最不容易出错的 - 但它很慢并且文件结束处理可能很棘手。

One potential solution is to send out data by chunks, with status code 61xx. Basically, I would call APDU.sendBytesLong, then throw an exception with 61xx to indicate there's more data. But it seems weird to throw an exception to indicate there's more data, even this seem to conform to the standard.

这是命令链解决方案,正确。

是的,不抛出异常就不能指示警告是相当愚蠢的。很好找到。但是您可以通过抛出异常来发送数据并生成状态字。可能最好保存状态字并在 process 方法结束时生成异常。

关于smartcard - Java 卡 : Send long response with T=0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53201747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com