• Aucun résultat trouvé

PROGRES – Projet 4 : Lecture des cartes NFC et HCE

N/A
N/A
Protected

Academic year: 2022

Partager "PROGRES – Projet 4 : Lecture des cartes NFC et HCE"

Copied!
4
0
0

Texte intégral

(1)

PROGRES – Projet 4 : Lecture des cartes NFC et HCE

Le but de ce projet est d’introduire le principe de la communication sans contact NFC afin de pouvoir développer des applications NFC dans le future. La maitrise

« du langage Java et la programmation Android » est indispensable. Ainsi que, il faut avoir au moins un smartphone Android intégrant une antenne NFC et au moins une carte bancaire NFC ou une carte Navigo.

Les AIDs internationales des cartes bancaires sont en ligne :

https://www.eftlab.co.uk/index.php/site-map/knowledge-base/211-emv-aid- rid-pix

Partie I : Détection des cartes NFC

Dans cette partie, vous aurez besoin d’un seul smartphone NFC pour l’utiliser comme un lecteur NFC et une ou plusieurs cartes NFC.

 Application lecteur NFC :

- Activer le NFC dans le manifest :

<uses-permission android:name="android.permission.NFC" />

<uses-feature android:name="android.hardware.nfc"

android:required="true" />

- Créer un nouveau projet Android : Empty

- Créer une interface graphique de votre choix avec un bouton Read et un EditText.

- Chercher l’AID de votre carte NFC et utiliser la commande APDU suivante : SELECT AID pour accéder à votre carte.

- Afficher la réponse APDU de la carte dans l’EditText.

- Si vous avez plusieurs cartes NFC, refaire la même chose avec leurs AIDs.

 Utiliser les variables et les fonctions suivantes :

private static final String SELECT_APDU_HEADER = "00A40400";

private static final byte[] SELECT_OK_SW = {(byte) 0x90, (byte) 0x00};

public static byte[] HexStringToByteArray(String s) { int len = s.length();

byte[] data = new byte[len / 2];

for (int i = 0; i < len; i += 2) {

data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)

(2)

+ Character.digit(s.charAt(i+1), 16));

}

return data;

}

public static String ByteArrayToHexString(byte[] bytes) { final char[] hexArray =

{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

char[] hexChars = new char[bytes.length * 2];

int v;

for ( int j = 0; j < bytes.length; j++ ) { v = bytes[j] & 0xFF;

hexChars[j * 2] = hexArray[v >>> 4];

hexChars[j * 2 + 1] = hexArray[v & 0x0F];

}

return new String(hexChars);

}

public static byte[] BuildSelectApdu(String aid) {

// Format: [CLASS | INSTRUCTION | PARAMETER 1 | PARAMETER 2 | LENGTH | DATA]

return HexStringToByteArray(SELECT_APDU_HEADER +aid);

}

public void onPause() { ////////////////////////

disableReaderMode();

/////////////////////

}

public void onResume() { //////////////////

enableReaderMode();

//////////////////

}

private void enableReaderMode() { ////////////////////////

Activity activity = getActivity();

NfcAdapter nfc = NfcAdapter.getDefaultAdapter(activity);

if (nfc != null) {

nfc.enableReaderMode(activity, this, READER_FLAGS, null);

}

//////////////////////

}

private void disableReaderMode() { ////////////////////////////

Activity activity = getActivity();

NfcAdapter nfc = NfcAdapter.getDefaultAdapter(activity);

if (nfc != null) {

nfc.disableReaderMode(activity);

}

//////////////////////////

}

(3)

public void onTagDiscovered(Tag tag) {

////////////////////////

}

 Indications :

-

Il ne faut pas oublier :

implements ReaderCallback

Partie II: Implémentation d’une application HCE

Dans cette partie, vous aurez besoin de deux smartphones Android. Comme vu en cours, vous allez programmer une application Android HCE qui émule une carte NFC.

 Application Lecteur :

- Vous pouvez utiliser la même application de la partie précédente avec ces indications :

public void onTagDiscovered(Tag tag) { ///////////////////////

IsoDep isoDep = IsoDep.get(tag);

if (isoDep != null) { try {

// Connect to the remote NFC device isoDep.connect();

byte[] command = BuildSelectApdu(………) byte[] result = isoDep.transceive(command);

///////////////////////////////////

///////////////////////////////////

///////////////////////////////////

}

 Application HCE

- Préparer un AID de votre choix pour l’application HCE.

- Créer le fichier apduservice.xml dans le dossier res :

<host-apdu-service

xmlns:android="http://schemas.android.com/apk/res/android"

android:requireDeviceUnlock="false">

<aid-group

android:category="other">

<aid-filter android:name="AID de votre choix"/>

</aid-group>

</host-apdu-service>

(4)

- Activer le NFC dans le manifest :

<uses-permission android:name="android.permission.NFC" />

<uses-feature android:name="android.hardware.nfc"

android:required="true" />

- Déclarer votre service HCE dans le manifest

<service

android:name=".HceService"

android:exported="true"

android:permission="android.permission.BIND_NFC_SERVICE" >

<intent-filter>

<action android:name="……….HOST_APDU_SERVICE" />

</intent-filter>

<meta-data

android:name="…………host_apdu_service"

android:resource="@xml/apduservice" />

</service>

- Créer un nouveau projet Android : Empty - Créer une interface graphique de votre choix.

- Créer la classe

HceService

qui

extends

de

HostApduService.

 Utiliser les variables et les fonctions suivantes :

private static final byte[] SELECT_AID = {0x00, (byte) 0xA4, 0x04,0x00,0x07,……….}; // pour comparer avec le Select reçu private static final byte[] ResponseOK= {0x01, 0x02, 0x03, 0x04, 0x90, 0x00}; // pour répondre au lecteur avec succès à la section

private static final byte[] ResponseError = {0x6F, 0x00}; // répondre avec erreur à la selection

public byte[] processCommandApdu(byte[] apdu, Bundle extras) { ///////////////////////

if (Arrays.equals(SELECT_AID, apdu)) {

return ResponseOK;

}

else return ResponseError;

////////////////////////////////////////

}

 Afficher le contenu de la commande APDU Select et la réponse APDU.

Références

Documents relatifs

Surface chemical modification of nanofibrillated cellulose in ionic liquids.. Nanofibrillated cellulose surface grafting in ionic liquid, Workshop September 2011 Espoo

Dans le cas, rencontré très souvent en RFID, où les étiquettes sont batteryless (sans source d'énergie embarquée), il est clair que la première chose à faire pour l'interrogateur

Toutes les caractéristiques techniques des tags NFC ont fait l’objet d’une norma- lisation internationale pour faire en sorte qu’ils fonctionnent avec un large spectre

October 31st 2013, Google introduced its mobile Operating System, Android 4.4 KitKat including a new NFC - Near Field Communication feature: Host-based Card Emulation (HCE).

Quand la tension aux bornes du condensateur devient supérieure à une tension seuil, notée U S , le composant électronique P (qui correspond au circuit intégré de réponse

Par une application mobile, n'importe quel utilisateur pourrait localiser les vélos à       proximité et emprunter un vélo disponible pour une certaine durée. Le préteur,

 Transferring and Receiving the &#34;Hello World!&#34; ASCII Text Using the LLCP Stack (Connection-Oriented) Note: The Symbian implementation for NFC does not support Card

Ainsi, un téléphone portable peut également être un tag NFC dans le cas d’un fonctionnement en pair-à-pair.. • Un tag est composé de trois