ATR kepanjangan dari Answer-To-Reset, merupakan data yang dikirim setelah berhasil melakukan koneksi ke Smartcard. Dengan mengetahui ATR nya, kita bisa tahu jenis dari smartcard yang sedang kita akses. Tetapi beberapa kali mencoba dengan C# kok tetap nggak dapat ATRnya ya ? .. perlu usaha lebih keras ? atau kurang tepat menggunakan fungsinya?
Berikut adalah daftar ATR dari beberapa Smartcard:
Beberapa kali mencoba untuk mendapatkan ATR dari smartcard yang ada, gagal. Tetapi akhirnya berhasil. Dan untuk solusi yang didapatkan adalah menggabungkan metode UnManage memory dari C#.
Anda bisa melengkapi program untuk smartcard sebelumnya dan menambahkan beberapa yang kurang dari rutin-rutin dibawah ini.
ATR berhasil diambil dengan menggunakan fungsi SCardStatus dari winscard dengan deklarasi import sebagai berikut:
Sedangkan definisi dari fungsi yang mengambil ATR seperti dibawah ini:
Ok, Selamat Mencoba!!!
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A Philips MIFARE Standard (1 Kbytes EEPROM) http://www.nxp.com/products/identification/mifare/classic/ RFID - ISO 14443 Type A - Transport for London Oyster ACOS5/1k Mirfare 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 02 00 00 00 00 69 Mifare card with 4k EEPROM 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68 Contactless Mifare Ultralight 3B D0 A8 FF 81 F1 FB 24 00 1F C3 F4 Philips DESFire SAM 3B DE 18 FF 81 F1 FB 34 00 1F 07 44 45 53 46 69 72 65 53 41 4D 56 31 2E 30 D2 Mifare Desfire SAM Module 3B F7 91 00 FF 91 81 71 FE 40 00 41 20 00 11 77 81 80 40 Contactless Mifare DESFire 3B F8 18 00 00 81 31 FE 45 00 73 C8 40 00 00 90 00 80 NXP JCOP 31 V2.2 36K - S/C I/F 3B F9 18 00 00 81 31 FE 45 39 35 32 38 35 30 31 33 31 DA JCOP31 / 72B1 V2.2 (4096 RSA key support) Smartcard Dual Interface JCOP31 with 72KB EEPROM and V2.2 Java Card Open Platform 3B F9 18 00 00 81 31 FE 45 4A 43 4F 50 32 31 56 32 32 A9 NXP JCOP 21 V2.2 36K 3B F9 18 00 00 81 31 FE 45 4A 43 4F 50 33 31 56 32 32 A8 JCOP31 / 72B1 V2.2 Smartcard Dual Interface JCOP31 with 72KB EEPROM and V2.2 Java Card Open Platformlebih banyak lagi, anda bisa melihat di sini
Beberapa kali mencoba untuk mendapatkan ATR dari smartcard yang ada, gagal. Tetapi akhirnya berhasil. Dan untuk solusi yang didapatkan adalah menggabungkan metode UnManage memory dari C#.
Anda bisa melengkapi program untuk smartcard sebelumnya dan menambahkan beberapa yang kurang dari rutin-rutin dibawah ini.
ATR berhasil diambil dengan menggunakan fungsi SCardStatus dari winscard dengan deklarasi import sebagai berikut:
[DllImport("winscard.dll")] private static extern int SCardStatus(int hCard, string szReaderName, out int pcchReaderLen, out int pdwState, out int pdwProtocol, IntPtr pbAtr, out int pcbAtrLen);
Sedangkan definisi dari fungsi yang mengambil ATR seperti dibawah ini:
private void btnConnect_Click(object sender, EventArgs e) { int ret; String reader; int readerlen; int card_state; int card_protocol; IntPtr atrptr; byte[] card_atr; int card_atrlen; reader = listReaders.SelectedItem.ToString(); ret = SCardConnect(hContext, reader, SCARD_SHARE_EXCLUSIVE, SCARD_PROTOCOL_T0 |SCARD_PROTOCOL_T1, out hCard, out ActiveProtocol); ret = SCardStatus(hCard, reader, out readerlen, out card_state, out card_protocol, IntPtr.Zero, out card_atrlen); atrptr = Marshal.AllocHGlobal(card_atrlen); ret = SCardStatus(hCard, reader, out readerlen, out card_state, out card_protocol, atrptr, out card_atrlen); card_atr = new byte[card_atrlen]; Marshal.Copy(atrptr, card_atr, 0, card_atrlen); Marshal.FreeHGlobal(atrptr); }ATR disimpan di variable card_atr
Ok, Selamat Mencoba!!!
1 comments:
Post a Comment