NFC

2016-11-01 31 views
3

長さ1699バイトのAPDUをNFC(クラスIsoDep)経由でJava Cardスマートカードに送信したいとします。 Transceive長さがNFC

私の携帯電話は、サムスンギャラクシーS7でサポートされる最大超えて:私はエラーに

にjava.io.IOExceptionを取得します。

私はカード上の自分のアプレットで長さを伸ばして使用します。私は、カードが長さを延長していることを確認しました。私は、4000バイトのAPDUをカードに送ることで、pyapdutool経由でこれをテストしました。

私はこのコードを記述する場合、結果はfalseであることが判明:

final Tag t = (Tag) tag; 
myTag = IsoDep.get(t); 
boolean result = myTag.isExtendedLengthApduSupported(); 

私は私のマニフェストにこれを持っている:私は1699バイトでAPDUを送信することができますどのように

<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経由で261バイト以上の任意の長さ)

+0

http://stackoverflow.com/questions/40173077/are-there-any-android-phones-which-support-extended-apdus –

+0

トピックは私の知り合いには解決されていません –

+0

カードがサポートしているかどうかは不明ですそのような長さ。デスクトップPCから試してみましたか? – guidot

答えて

3

短い答え:簡単にはできません。

あなたは既にIsoDepは(すなわちfalseを返しisoDep.isExtendedLengthApduSupported())あなたのデバイス上の拡張長のAPDUを「サポート」しないことが分かりました。実際にはこれはではありません。は、IsoDepオブジェクトで拡張長のAPDUを送信できないことを意味します。実際には、IsoDepオブジェクトは、2つ以上のISO-DEPブロックにわたって拡張長APDUを適切に分割しないため、261バイトを超えるAPDUは送信バッファサイズを超えると見なされます。それでも、サイズが< = 261バイトの拡張長APDUを送信できるはずです。

したがって、isoDep.isExtendedLengthApduSupported()は、1つのISO-DEPトランシーバで261バイト以上を送信できるかどうかを実際に示します。あなたはこの問題を克服するために何ができるか

は、あなたの場合(すべてでIsoDepオブジェクトを使用して、代わりに、手動でNfcAオブジェクトの上にISO-DEP(ISO/IEC 14443-4伝送プロトコル)を実装しないことですNFC-A/ISO/IEC 14443タイプA)またはNfcBオブジェクト(カードがNFC-B/ISO/IEC 14443タイプB およびに基づいている場合は、NfcBオブジェクトでのデータ交換がサポートされています) 。拡張された長さのAPDUを、NFCコントローラの送受信バッファ(通常、CRCバイトを除くヘッダーバイトを含めて253バイト)用に十分小さいISO-DEPブロックに分割することができます。しかし、ISO-DEPプロトコルを自分で処理することは、適切なISO-DEPアクティベーション、ブロック番号の処理、肯定応答、タイムアウト、待ち時間の延長などを処理しなければならないことを意味します。 Android NFCスタックによる遅延のために観察が容易ではありません。

+0

鍵ペアと証明書をカードに入れたい。それはpkiカードですか? pkiカードに証明書がありますか?あなたは私にとってより良い提案をしていますか? – Fatemeh

+1

@Fatemeh拡張長のAPDUサポートにはどのような関係があるのか​​よくわかりません。 –

+0

完全な回答ありがとうございますが、アンドロイドアプリを使用してJavaカードで証明書を作成したいと思います。私はカードに鍵ペアを作成し、nfcを使用して証明書を発行し、今では証明書をカードに保管したい。 isodepクラスの代わりに私のために良い提案がありますか? – Fatemeh