使用Android NFC向Java卡发送超过261个字节

使用Android NFC向Java卡发送超过261个字节,android,nfc,javacard,apdu,contactless-smartcard,Android,Nfc,Javacard,Apdu,Contactless Smartcard,我想通过NFC(classIsoDep)将长度为1699字节的APDU发送到Java卡智能卡。我得到了错误 java.io.IOException:收发器长度超过支持的最大长度 我的手机是三星Galaxy S7 我在卡上的小程序中使用扩展长度。我已验证该卡支持扩展长度。我通过pyapdutool向卡发送一个4000字节的APDU来测试这个 我发现当我编写此代码时,结果是false: final Tag t = (Tag) tag; myTag = IsoDep.get(t); boolean r

我想通过NFC(class
IsoDep
)将长度为1699字节的APDU发送到Java卡智能卡。我得到了错误

java.io.IOException:收发器长度超过支持的最大长度

我的手机是三星Galaxy S7

我在卡上的小程序中使用扩展长度。我已验证该卡支持扩展长度。我通过pyapdutool向卡发送一个4000字节的APDU来测试这个

我发现当我编写此代码时,结果是
false

final Tag t = (Tag) tag;
myTag = IsoDep.get(t);
boolean result = myTag.isExtendedLengthApduSupported();
我的舱单上有:

<activity
        android:name=".test"
        android:label="@string/title_test"
        android:launchMode="singleTop"
        android:theme="@style/AppTheme.NoActionBar" >
    <action android:name="android.nfc.action.TAG_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    </intent-filter>
</activity>


如何通过Android NFC发送1699字节(或任何大于261字节的长度)的APDU?

简短回答:你不容易做到这一点


您已经发现
IsoDep
在您的设备上不“支持”扩展长度APDU(即
IsoDep.isExtendedLengthApduSupported()
返回
false
)。实际上,这并不意味着不能通过
IsoDep
对象发送扩展长度apdu。实际上,这只意味着
IsoDep
对象不会在两个以上的ISO-DEP块上正确分割扩展长度的APDU,因此,长度超过261字节的APDU将被假定为超过传输缓冲区大小。您仍然可以发送带有尺寸的加长APDU。据我所知,该主题尚未解决。目前尚不清楚该卡是否支持这种长度。你在台式电脑上试过并在那里使用过吗?即使是我的笔记本电脑也不支持加长。不幸的是,故事又重演了。首先,“普通”智能卡读卡器不支持延长长度,然后它们以一种非常有缺陷的方式支持,现在似乎只剩下一些小问题。我想NFC芯片也会如此(虽然这些芯片更便宜,所以可能需要更多的时间)。我想在我的卡上有密钥对和证书。它是pki卡吗?pki卡有证书吗?您有更好的建议吗?@Fatemeh我不确定这与扩展长度APDU支持有什么关系。谢谢您的完整回答,但我想使用android应用程序在java卡中创建一个证书。我在卡中创建密钥对,并使用nfc颁发证书,现在我想在卡中存储证书。您有更好的建议来代替isodep类吗?@Fatemeh您不需要扩展长度的APDU来向Java卡小程序写入大量数据。相反,您应该实现写入(例如写入/更新二进制命令)以在多个较小的数据块中传输数据。谢谢Michael。我根据你的解释写了我的代码,但我又犯了错误。我把它寄了进去。你能帮助我吗?