当我从普通读卡器(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)
可能是超时问题(处理时间总是<1s)?还是有些T = 0怪异? 我的AndroID应用程序代码非常简单:
Channel channel = session.openLogicalChannel(aID);byte[] resp = channel.transmit(new byte[] {(byte) 0x80,0x04,0x00,0x00});
Open Mobile API,4.4.2(19).
任何帮助都会很好,我花了两天时间来解决这个问题.
请救救我.
Vojta开发
编辑
我的访问规则:
AID: A000000018308005006563686F00 ___ AllApps:NeverAID: A0000000183080055A6563686F5A ___ Hash:ABFF7159B0530044CD71C6561B0F9D55CBAE8984:AlwaysAID: A000000018308005596563686F59 ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:AlwaysAID: A000000018308005586563686F58 ___ AllApps:AlwaysAID: NO_AID ___ AllApps:AlwaysAID: A000000018308005006563686F00 ___ AllApps:NeverAID: A0000000183080055A6563686F5A ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:AlwaysAID: A000000018308005596563686F59 ___ Hash: ABFF7159B0530044CD71C6561B0F9D55CBAE8984:AlwaysAID: A000000018308005586563686F58 ___ AllApps:AlwaysAID: NO_AID ___ AllApps:Always
在上面的列表中,我仅过滤了APDU规则(并且NFC规则根本没有写下来).
我的小程序有AID F06D617073616D2E617070
我的发卡行安全域为A0000000871002FF33FFFF8901010100.
我认为这些规则不会影响我的APDU,没有带头和掩码的真正过滤器……
解决方法 我在applet中发现了一个错误,这确实导致了整个问题.我的applet响应状态字0x911C并且没有数据.但是,SEEK总是返回0x9000而不是0x911C,因为通过SEEK访问时不能使用状态字0x91XX.下一段是来自SEEK论坛的EduardEtc,它解释了一切:“ETSI定义(在TS 102 221中)状态字91XX用于SIMToolKit(CAT)应用程序.任何以SW1SW2发送9000的卡应用程序都可以返回91xx而不是电话必须解释为处理CAT APDU.因此电话应用程序将永远不会看到91xx,它被手机的CAT处理层取代了9000. ISO / IEC 7816-4定义了SW1SW2 = 61xx用于类似的目的.当时这包括在标准中以满足ETSI的需要,但是,ETSI没有等待ISO过程完成并指定了不同的编码.“
总结以上是内存溢出为你收集整理的从seek-for-android访问时,Javacard applet RPDU不包含任何数据全部内容,希望文章能够帮你解决从seek-for-android访问时,Javacard applet RPDU不包含任何数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)