Bir ISO/IEC 14443 Type A kartından bazı bilgileri okuyamaya çalışıyorum.Android NFC IsoDep dosya içeriğini oku
Android uygulaması NFC TagInfo ile kartı analiz ettikten sonra, uygulamanın (AID: 15845F) ihtiyacım olan belirli bir dosyaya (Dosya ID: 01) sahip olduğunu öğrendim.
Zaten karta bağlanmayı ve uygulamayı seçmeyi başardım.
String action = getIntent().getAction();
if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action))
{
Tag tagFromIntent = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
Log.i(TAG, Arrays.toString(tagFromIntent.getTechList()));
IsoDep isoDep = IsoDep.get(tagFromIntent);
try
{
isoDep.connect();
byte[] SELECT = {
(byte) 0x00, // CLA = 00 (first interindustry command set)
(byte) 0xA4, // INS = A4 (SELECT)
(byte) 0x04, // P1 = 04 (select file by DF name)
(byte) 0x0C, // P2 = 0C (first or only file; no FCI)
(byte) 0x06, // Lc = 6 (data/AID has 6 bytes)
(byte) 0x31, (byte) 0x35,(byte) 0x38,(byte) 0x34,(byte) 0x35,(byte) 0x46 // AID = 15845F
};
byte[] result = isoDep.transceive(SELECT);
Log.i(TAG, "SELECT: " + bin2hex(result));
if (!(result[0] == (byte) 0x90 && result[1] == (byte) 0x00))
throw new IOException("could not select application");
byte[] GET_STRING = {
(byte) 0x00, // CLA Class
(byte) 0xB0, // INS Instruction
(byte) 0x00, // P1 Parameter 1
(byte) 0x00, // P2 Parameter 2
(byte) 0x04 // LE maximal number of bytes expected in result
};
result = isoDep.transceive(GET_STRING);
Log.i(TAG, "GET_STRING: " + bin2hex(result));
}
}
Ancak ikinci sorgum hata koduyla başarısız oluyor: 6A86 (Yanlış parametreler P1-P2). Zaten çok googled ve farklı belgeler (örneğin: http://bit.ly/180b6tB) bulundu, ama sadece anlayamadım, P1 ve P2 için doğru değerleri nasıl uygulayabilirim. NFC TagInfo kullanılarak kartın
DÜZENLEME
Etiket türü: ISO/IEC 14443-4 Akıllı Kart, Mifare DESFire EV1 (MF3ICD81)
SEÇ komutu kullanılan Kaynak kod aslında başarısız olmadı, ancak bunun yerine 9000 yanıt verdi. Bu yüzden her şeyin yolunda olduğunu düşündüm.
Sen NFC TagInfo DF-adları vb doğru değerleri sağlamadığını Verilen değer 0x313538343546 doğru mu ve bunu nasıl öğrendin?
Bana kısa tanımını sağlayabilir misiniz, istediğiniz verileri nasıl alabilirim? Doğru DF-isimlerini, AID'leri okumak için kullanabileceğim başka bir android uygulaması var mı? Temel olarak ONE uygulamasının ONE dosyasını almam gerekiyor. Gerekirse, NFC TagInfo ile toplanan bilgilerin bazı ekran görüntülerini de sağlayabilirdim.
(Önerilen gibi) komutları yeniden yazılabilir, ama 2
DÜZENLEME APDU sargı bunları muhafaza. Bu nedenle, biri uygulamasının ve diğeri dosyasının dosyasının seçimi için iki farklı komutu vardır.
private final byte[] NATIVE_SELECT_APP_COMMAND = new byte[]
{
(byte) 0x90, (byte) 0x5A, (byte) 0x00, (byte) 0x00, 3, // SELECT
(byte) 0x5F, (byte) 0x84, (byte) 0x15, (byte) 0x00 // APPLICATION ID
};
private final byte[] NATIVE_SELECT_FILE_COMMAND = new byte[]
{
(byte) 0x90, (byte) 0xBD, (byte) 0x00, (byte) 0x00, 7, // READ
(byte) 0x01, // FILE ID
(byte) 0x00, (byte) 0x00, (byte) 0x00, // OFFSET
(byte) 0x00, (byte) 0x00, (byte) 0x00, // LENGTH
(byte) 0x00
};
yerli Mifire-DesFire komutları için bir öğretici arayışı başarılı olmadı, bu yüzden aşağıdaki öğretici sopa: http://noobstah.blogspot.de/2013/04/mifare-desfire-ev1-and-android.html
Bu öğretici bir kart doğrulama, ben özürlü sağlar ve ayrıca kullandığı Anlayışım için yerel komutları yürütmek için uygun bir yol olmayan transceive yöntemi? Yerel komutları yürütmek için hangi yöntem, hatta kod snippit'i kullanılır? Hangi Android Sınıfını kullanmalıyım?
Öğreticide sağlanan sınıfı yeniden yazdım ve pastebin'a yükledim. Sınıfı çalıştırdıktan sonra aşağıdaki sonuçları elde ettim.
Select APPLICATION: 9100
Read DATA: 91AE
Bu noktada oldukça sıkışıp kaldım ve sonra ne yapmam gerektiğini bilmiyorum. Aslında istediğim verileri almak için hata mıydı, yoksa sorgularda ne gibi değişiklikler yapmalıydım?
Hızlı yanıt için teşekkürler! Gönderiyi yeni düzenledim ve en altta ek bilgi var. – Vilius
Yardımlarınız için teşekkürler, ancak hala takıldım ve yayınımı düzenledim ve daha fazla bilgi verdim. – Vilius
Cevabı güncelledim. Maalesef, kimlik doğrulama prosedürünü uygulamanızda size yardımcı olamam. –