我有一个复杂的 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)
是否是超时问题(处理时间始终
我的 Android 应用程序代码非常简单:
Channel channel = session.openLogicalChannel(aid);
byte[] resp = channel.transmit(new byte[] {(byte) 0x80, 0x04, 0x00, 0x00, 0x00});
开放移动 API,4.4.2 (19)。
任何帮助都会很好,我花了两天解决这个问题。
请救救我。
Vojta
EDIT我的访问规则:
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
我的发行人安全域是 A0000000871002FF33FFFF8901010100。
我不认为这些规则会影响我的 APDU,没有带有标头和掩码的真正过滤器...