Saya menggunakan GEMALTO IDBRIDGE K30 yang terhubung melalui USB ke perangkat Android.

Pertama saya mengirim pesan PC_to_RDR_IccPowerOff seperti ini.

byte[] data= new byte[]{
                    (byte) 0x62,
                    (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
                    (byte) 0x00,
                    (byte) 0x00,
                    (byte) 0x00,
                    (byte) 0x00, (byte) 0x00};


            UsbInterface intf = _usbDevice.getInterface(0);
            UsbEndpoint outputEndpoint = intf.getEndpoint(1);
            UsbEndpoint inputEndpoint = intf.getEndpoint(0);
            intf.getEndpointCount();
            UsbDeviceConnection connection = _usbManager.openDevice(_usbDevice);

            connection.claimInterface(intf, forceClaim);

            //activate card for apdu
            final int dataTransferred = connection.bulkTransfer(inputEndpoint, data, data.length, TIMEOUT);

            Log.e(SIGNATURE_LOG, String.format("Written %s bytes to the dongle. Data written: %s", data.length, byteArrayToHexArrayString(data)));

Sebagai tanggapan saya dapatkan

Pesan diterima dengan panjang 64 dan isi: [80, 18, 00, 00, 00, 00, 00, 00, 00, 00, 3B, DF, 18, 00, 81, 31, FE, 58, 80, 31, 90 , 52, 41, 01, 64, 05, C9, 03, AC, 73, B7, B1, D4, 44, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 , 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00]

Setelah ini saya menunggu 5 detik dan kemudian saya mencoba mengirim perintah APDU Select dengan PC_to_RDR_XfrBlock.

byte[] data2= new byte[]{
                        (byte) 0x6F,
                        (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00,
                        (byte) 0x00,
                        (byte) 0x01,
                        (byte) 0x00,
                        (byte) 0x00, (byte) 0x00,
                        (byte) 0x00,
                        (byte) 0x00,
                        (byte) 0x0C,
                        (byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x00,
                        (byte) 0x07, (byte) 0xA0, (byte) 0x00, (byte) 0x00,
                        (byte) 0x01, (byte) 0x18, (byte) 0x45, (byte) 0x4E,
                        (byte) 0x15,};

Sebagai Respon saya mendapatkan ini apa yang merupakan Kesalahan F4 dengan Deskripsi PROSEDUR BYTE KONFLIK:

Pesan diterima dengan panjang 64 dan isi: [80, 00, 00, 00, 00, 00, 01, 40, F4, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 , 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 , 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00]

Adakah yang bisa membantu saya? Saya tidak mengerti apa yang saya lakukan salah.

1
user2270079 11 Maret 2017, 21:09

2 jawaban

Jawaban Terbaik

Kesalahan PROCEDURE BYTE CONFLICT sedikit rumit karena terjadi di dalam firmware pembaca dan dieskalasikan kepada Anda melalui CCID. Pada dasarnya ini berarti bahwa pembaca berbicara ke kartu pintar melalui protokol T=1 dan beberapa byte prosedur T=1 tidak diterima atau dikirim dengan benar antara pembaca dan kartu pintar. Menurut pendapat saya tidak ada yang dapat Anda lakukan dalam aplikasi Anda. Apa yang dapat Anda lakukan:

  • Jika kartu pintar Anda mendukung protokol T=0 coba terapkan
  • Perbarui pembaca Anda ke firmware terbaru
  • Mungkin smartcard Anda rusak, coba yang lain dengan tipe yang sama (atau versi yang lebih baru)

  • Juga di sini menyatakan terkadang ada masalah dengan beberapa port USB. Coba sambungkan pembaca Anda ke hub USB ke perangkat Android.

Memperbarui

Pembaca kartu pintar Anda GEMALTO IDBRIDGE K30 melaporkan tingkat pertukaran TPDU (lihat di sini). Karena di tingkat pertukaran TPDU semua data yang dikirim ke pembaca diteruskan ke kartu pintar apa adanya, Anda harus menangani protokol T=1 di dalam perangkat lunak Anda. Biasanya driver akan menangani tugas ini, tetapi dalam kasus Anda, Anda berkomunikasi langsung ke pembaca kartu pintar pada level USB. Jadi tidak ada pengemudi di antaranya. Jadi Anda harus mengimplementasikan dan menangani protokol T=1 sendiri dalam kode Anda atau menemukan implementasi Java yang ada. ISO-7816-3 adalah standar yang mendefinisikan protokol T=1. Sayangnya itu tidak tersedia secara gratis jadi saya tidak dapat memberikan tautan ke sana (coba pencarian Google). Anda dapat menemukan implementasi protokol T=1 yang ada dalam bahasa C di driver CCID Linux.

Jika Anda tidak terikat dengan pembaca GEMALTO IDBRIDGE K30, Anda bisa mendapatkan pembaca lain yang memiliki tingkat pertukaran APDU diperpanjang atau APDU pendek. Dalam kasus ini, Anda tidak perlu peduli dengan protokol di perangkat lunak Anda.

1
arminb 15 Maret 2017, 11:52

PROCEDURE BYTE CONFLICT adalah kesalahan CCID. kode sumber file C ada di http://ccid.sourcearchive .com/documentation/0.9.3/ccid_8c-source.html

Berkomunikasi dengan pembaca kartu pintar melalui host USB Android

0
Community 23 Mei 2017, 11:54