从seek for android访问时,Javacard小程序RPDU不包含任何数据

从seek for android访问时,Javacard小程序RPDU不包含任何数据,android,applet,javacard,sim-card,open-mobile-api,Android,Applet,Javacard,Sim Card,Open Mobile Api,我有一个复杂的Javacard小程序,它是为普通智能卡(例如NXP J3E145,T=1)开发和测试的。现在我必须在UICC手机上使用它,并从我的Android应用程序访问它。UICC使用T=0协议 当我从普通读卡器(Omnikey 5321)与SIM卡通信时,小程序工作正常 但是,当我将其移动到我的手机(Sony Xperia S)中并通过seek for android API发送APDU时,一些RPDU不包含任何数据部分,只有状态字0x9000,数据部分缺失 这些APDU正在失败: 80

我有一个复杂的Javacard小程序,它是为普通智能卡(例如NXP J3E145,T=1)开发和测试的。现在我必须在UICC手机上使用它,并从我的Android应用程序访问它。UICC使用T=0协议

当我从普通读卡器(Omnikey 5321)与SIM卡通信时,小程序工作正常

但是,当我将其移动到我的手机(Sony Xperia S)中并通过seek for android API发送APDU时,一些RPDU不包含任何数据部分,只有状态字0x9000,数据部分缺失

这些APDU正在失败:

80 04 00 00 00 --> 90 00 (although there should be some data, 200 bytes approx.)
80 01 00 00 00 --> 90 00 (although I expect 18 bytes)
这些APDU正常:

80 05 00 00 00 --> 00 90 00 (one byte as I expected)
80 06 00 00 00 --> <... data of length 20 ...> 90 00 (as I expected)
开放移动API,4.4.2(19)

任何帮助都很好,我花了两天时间解决这个问题。 请救救我

沃伊塔

编辑 我的访问规则:

AID: A000000018308005006563686F00 ___ AllApps:Never
AID: A0000000183080055A6563686F5A ___ Hash:ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005596563686F59 ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005586563686F58 ___ AllApps:Always
AID: NO_AID ___ AllApps:Always
AID: A000000018308005006563686F00 ___ AllApps:Never
AID: A0000000183080055A6563686F5A ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005596563686F59 ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005586563686F58 ___ AllApps:Always
AID: NO_AID ___ AllApps:Always
在上面的列表中,我只过滤了APDU规则(NFC规则根本没有写下来)

我的小程序具有AID F06D617073616D2E617070 我的发卡机构安全域是A0000000871002FF33FF8901010100


我不认为这些规则会影响我的apdu,没有带头和掩码的真正过滤器…

我想主要问题是开放的逻辑通道。可能是卡不支持逻辑通道。尝试打开基本频道

u没有得到任何响应数据,因为没有设置Le部分。CLA,INS,P1,P2,(Le),数据
..如果将Le字段设置为00,则应获得完整的返回响应,即可用字节总数。同样,如果您发送所需的字节数,假设XX,然后将其传递,您应该能够得到该响应,如果超过256,则为61 XX,XX表示响应的字节数。

我在小程序中发现一个错误,这确实导致了整个问题。我的小程序以状态字0x911C响应,但没有数据。但是,SEEK始终返回0x9000而不是0x911C,因为通过SEEK访问时无法使用状态字0x91XX。下一段是来自SEEK论坛的EduardTC,它解释了一切:


“ETSI定义(在TS 102 221中)与SIMToolKit(CAT)一起使用的状态字91XX应用程序。任何将9000作为SW1SW2发送的卡应用程序都可以返回91xx,而手机必须将其解释为处理CAT APDU。因此,手机应用程序将永远看不到91xx,它将被9000替换为手机的CAT处理层。ISO/IEC 7816-4为类似目的定义了SW1SW2=61xx。在这一时间,包括n标准是为了满足ETSI的需要,然而,ETSI没有等待ISO进程完成,而是指定了不同的编码。”

当我将Le字节从0更改为0xFF时,我得到了0x6881。这真是令人困惑——我以为SEEK管理所有逻辑通道的东西。不同的Le字节如何将状态字从0x9000更改为0x6881?有线索吗?请帮帮我…我想这可能是在处理61XX或6CXX响应时出现的seek for android错误。是否有任何方法可以跟踪真正发送到UICC的APDU(TPDU)?我尝试了Le、Lc等所有可能的选项,结果总是一样的:-(:1.
Lc=1数据={0x00}Le=null-->90 00
2.
Lc=1数据={0x00}Le=0-->90 00
3.
Lc=1数据={0x00}Le=255-->90 00
4.
LC=null-Data=null-Le=null-->90 00
5.
LC=null-Data=null-Le=0-->90 00
6.
LC=null-Data=null-Le=255-->68 81请不要使用注释获取更多信息。在这种情况下,编辑您的问题并在那里添加更多信息。若要将apdu发送到通过android的uicc您需要ARA小程序,它定义将apdu发送到uicc的规则。您安装了这个小程序还是ARF?当我将Le字节更改为任何>0时,我得到0x6881-SW_逻辑通道不受支持。否决:因为Le 00并不意味着不需要数据。@AnuragSharma我们不能否决评论,但这并不意味着“所有可用字节"也可以。这意味着最大响应大小为256字节。@owlstead我没有否决评论,这是我为什么否决答案的解释。我不想只是否决然后离开,我解释说是的,我有理由否决了答案。@AnuragSharma我不是在批评你,我只是想跟你提一下initvojta的评论也是不正确的。哎哟,谢谢你的回复。我不会猜到它有那么深。
AID: A000000018308005006563686F00 ___ AllApps:Never
AID: A0000000183080055A6563686F5A ___ Hash:ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005596563686F59 ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005586563686F58 ___ AllApps:Always
AID: NO_AID ___ AllApps:Always
AID: A000000018308005006563686F00 ___ AllApps:Never
AID: A0000000183080055A6563686F5A ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005596563686F59 ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:Always
AID: A000000018308005586563686F58 ___ AllApps:Always
AID: NO_AID ___ AllApps:Always