2016-08-31 1 views
0

J'essaye d'initialiser un nouveau Tag Classique Mifare au format DNEF, lisible par l'API Proximity.Initialiser un tag NDEF sur Windows 10 Desktop

Selon Microsoft, l'API de proximité est capable d'initialiser une balise mifare classic au format NDEF si nécessaire (comme décrit here et here).

Mais, en utilisant cette ligne de code pour publier le message:

proximityDevice.PublishBinaryMessage("NDEF:WriteTag", ndef.ToByteArray().AsBuffer(), MessageTransmittedHandler); 

ne pas initialiser le TAG et d'écrire quoi que ce soit, fonctionne tout simplement sur une étiquette NDEF pré-formaté (fait par un téléphone Android, pour Exemple).

Il existe un moyen d'initialiser le TAG au format NDEF sur la famille Desktop, à savoir le lecteur/enregistreur NFC d'un périphérique de proximité? (NXP NearFieldProximity Provider)


MISE À JOUR:

J'ai trouvé une API Mirafe pour .NET à partir Onovotny toutes les opérations de bas niveau pour envoyer les données APDU à MIFARE, en soutenant le cadre WinRT SmartCard que J'utilise.

Le problème consiste maintenant sur les opérations de données (getData ou setData) lorsque tente de se connecter la carte, la production de cette exception:

"The smart card has been reset, so any shared state information is invalid. (Exception from HRESULT: 0x80100068)" 

Je peux obtenir l'identification de la carte et la carte est writabble sur les appareils Android. J'ai également essayé de changer le KeyA à {0x00,0x00,0x00,0x00,0x00,0x00}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} et {0xA0,0xA1,0xA2,0xA3,0xA4,0xA5} mais Les résultats sont les mêmes.

Répondre

1

vient de lancer un service Windows à services.msc appelé « Service Enumeration périphérique carte à puce », et je pourrais être en mesure d'écrire/lire les données à/de cartes à puce. Concernant le formatage NDEF, j'ai inséré des données MAD sur le secteur 0, les blocs 1 et 2. Ensuite, j'ai ajouté les enregistrements NDEF sur le secteur 1, bloc 0..2. Ensuite, je mis à jour les secteurs clés A et clé B de MAD et NDEF comme celui-ci:

Remplissage MAD et 2 enregistrements NDEF manuellement:

 //Atualiza KeyB 
     mifareCard.AddOrUpdateSectorKeySet(new SectorKeySet { 
      Key = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, 
      KeyType = KeyType.KeyB, 
      Sector = 0 
     }); 
     //Seta dados do MAD 
     await mifareCard.SetData(0, 1, new byte[] { 0x14, 0x01, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1 }); 
     await mifareCard.SetData(0, 2, new byte[] { 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1 }); 

     mifareCard.AddOrUpdateSectorKeySet(new SectorKeySet { 
      Key = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, 
      KeyType = KeyType.KeyB, 
      Sector = 1 
     }); 
     //Incluis dois records NDEF 
     await mifareCard.SetData(1, 0, new byte[] { 0x00, 0x00, 0x03, 0x11, 0xD1, 0x01, 0x0D, 0x55, 0x01, 0x61, 0x64, 0x61, 0x66, 0x72, 0x75, 0x69 }); 
     await mifareCard.SetData(1, 1, new byte[] { 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); 

     await mifareCard.Flush(); 

touches Mise à jour pour les enregistrements NDEF:

 //Get MAD sector 
     var setor = mifareCard.GetSector(0); 
     //Get Trail data 
     await setor.GetData(3); 
     //Update chaves. Acess bits are generated by Mirafe API 
     await setor.FlushTrailer(
      Extensions.ByteArrayToString(new byte[] { 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5 }), 
      Extensions.ByteArrayToString(new byte[] { 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 } 
     )); 

     //Set others sectors keys for NDEF 
     for (var sector = 1; sector < 16; sector++) { 
      try { 
       setor = mifareCard.GetSector(sector); 
       await setor.GetData(3); 
       await setor.FlushTrailer(
        Extensions.ByteArrayToString(new byte[] { 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 }), 
        Extensions.ByteArrayToString(new byte[] { 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 } 
       )); 
      } catch (Exception ex) { 
       Debug.Write(ex.Message + "\n"); 
      } 
     }