WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Conception et réalisation d'une application Java Card pour la recherche de billet d'avion le moins cher

( Télécharger le fichier original )
par Etudiants fin de cycle ingénieur Etudiants fin de cycle ingénieur
Université Mouloud Mammeri Tizi Ouzou Algérie - Ingénieur informatique 2008
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

PARTIE I : Outils et Logiciels

Etape1 : Description des outils (logiciels / matériels) utilisés :

· Les outils logiciels :

1. EasyPHP : on l'utilise pour la création et la gestion des bases de données :

Pour la création de la base de données utilisée dans notre projet.

2. JDK1.6 (recommandée, la plus récente) : elle inclut la bibliothèque « javax.smartcardio » qui est nécessaire pour notre application.

3. Jbuilder Foundation 2005 : il est utilisé pour :

- La création d'un projet javacard et sa compilation. Le résultat de cette dernière nous donne un fichier (.cap) qui sera chargé sur la carte.

- Le chargement de l'applet (application serveur).

4. Connecteur JDBC Mysql (version 3.0.15) : Utile pour la connexion à la base de données.

5. GemXplore Developer : Un kit complet pour les tests des applications. Il contient plusieurs outils parmi eux JcardManager.

6. JcardManager : il présente une multitude de fonctionnalités :

- Le chargement de l'applet (voir la section III).

- La sélection de l'applet.

- La suppression de l'applet de la carte.

- L'envoi des APDU's.

7. Notpad ++ : Editeur de textes efficace qui donne une meilleure lisibilité aux sources.

· Les outils matériels :

1. Un PC Intel P 4 1.80 GHz RAM 256 Mo.

2. Lecteur de cartes à puce CHIPDRIVE micro 100 V4.30 : utilisé comme un terminal d'insertion de la carte.

3. Carte à puce GEM Xplore 3G.

4. Dongle ou Verrou : pour initialiser la communication entre le terminal et la carte.

Etape2 : Installation et configuration des outils :

1. EasyPHP :

EasyPHP installe et configure automatiquement un environnement de travail complet. Il regroupe un serveur Apache, une base de données MySQL, le langage PHP ainsi que des outils facilitant le développement de sites ou d'applications.

Installation d'EasyPHP :

Ø Télécharger EasyPHP sur le site :

http://www.manucorp.com/

http://www.easyphp.org/

Ø Lancer l'application « EasyPHP\ easyphp2.0b1_setup.exe » et suivre les instructions d'installation en choisissant la langue et le répertoire d'installation.

NB: Pour mieux suivre la procédure de configuration, on vous conseille d'installer EasyPHP dans le répertoire proposé par défaut : « C:\Program Files\EasyPhp2.0b1 »

Pour vérifier si EasyPHP fonctionne, il vous suffit de taper dans votre navigateur web préféré:

· http://localhost

· ou http://127.0.0.1

Lancement d'EasyPHP :

Le lancement d'EasyPHP permet la mise en route du serveur Apache et de MySQL.

Pendant l'installation, un raccourci vers EasyPHP est créé dans le répertoire" Démarrer/Programmes/EasyPHP ".

Une fois EasyPHP lancé, une icône se place à côté de l'horloge :

EasyPHP

Un clic droit sur l'icone permet d'accéder à différents menus :

Cliquer ici pour afficher la page d'administration d'EasyPHP.

 
· Aide : aide d'EasyPHP.
 
· Fichiers Log : renvoie les erreurs générées par Apache, MySQL et EasyPHP.
 
· Configuration : donne accès aux différents outils de configuration.
 
· Explorer : ouvre le répertoire "www" via l'explorateur Windows.
 
· Administration : ouvre la page d'administration.
 
· Web local : ouvre le web local.
 
· Redémarrer : redémarre Apache et MySQL.
 
· Démarrer/Arrêter : démarre/arrête Apache et MySQL.
 
· Quitter : ferme EasyPHP.

Sur le menu « Administration », cliquer sur « PhpMyAdmin » pour lancer l'interface graphique de PhpMyAdmin .

Le SGBD MySQL 

MYSQL est un gestionnaire de base de données SQL multi utilisateurs et multi traitements. Il se compose d'un langage de définition de données (LDD) et de droits ainsi que d'un langage de manipulation de données (LMD).

MySQL est fondé sur SQL qui est un langage de requêtes vers les bases de données exploitant le modèle relationnel. Il est implémenté sur un mode client serveur, avec un démon mysqld du coté serveur et toute une variété de librairies et de programmes du coté client.

Il a l'avantage d'être portable (il peut être compilé sur plusieurs plates-formes comme Windows, Unix...etc.). De plus, il est facile à utiliser, standard (il utilise SQL), robuste et gratuit. Il permet le stockage et la manipulation de données d'une façon libre, rapide et fiable.

PhpMyAdmin :

Pour implémenter notre base de données, on a utilisé l'outil PhpMyAdmin fourni avec le logiciel EasyPHP. Le SGBD PhpMyAdmin, avec son interface graphique, nous a permis de créer et de gérer l'ensemble des tables de notre base de données.

PhpMyAdmin, consiste en un ensemble de scripts PHP, permettant d'administrer des bases de données MySQL via un navigateur Web. Il a Plusieurs fonctions parmi elles, on cite:

· La création et la suppression de bases de données ;

· La création, la modification et la suppression de tables ;

· L'édition, l'ajout et la suppression de champs ;

· L'exécution de commandes SQL et de requêtes batch ;

· La création d'index ;

· Le chargement de fichiers textes dans des tables ;

· La gestion des privilèges des utilisateurs.

La figure suivante illustre l'espace de travail de PhpMyAdmin :

Figure: Espace de travail de PhpMyAdmin.

Configuration d'EasyPHP pour une connexion à distance à la base de données:

Ø Dans le répertoire d'installation d'EasyPHP, choisir le répertoire mysql :

« C:\Program Files\EasyPHP 2.0b1\mysql ».

Dans le fichier « my.ini», changer la valeur de bind-address avec : « 0.0.0.0 » :

« bind-address = 0.0.0.0 ».

Note : On peut agir d'une autre manière en cliquant avec le bouton droit sur l'icône d'EasyPHP dans la zone de notification et en choisissant le menu « Configuration » puis « MySQL » et le fichier « my.ini » va s'ouvrir.

Ø Dans le répertoire d'installation d'EasyPHP, choisir le répertoire phpmyadmin :

« C:\Program Files\EasyPHP 2.0b1\ phpmyadmin ».

Dans le fichier «config.sample.inc.php» (« ou config.inc.php » dans la version 1-8 d'EasyPHP), changer « localhost » dans la ligne suivante :

$cfg['Servers'][$i]['host'] = 'localhost'

par l'adresse IP de la machine (hôte) qui va se connecter au serveur MySQL à distance.

Exemple : Si l'adresse IP est de «192.168.27.2» alors

$cfg['Servers'][$i]['host'] = '192.168.27.2'.

Création d'une base de données sous MySQL:

Pour créer une base de données, saisir le nom de la base de données dans le champ prévu à cet effet dans la page d'accueil de PhpMyAdmin.

Ajout d'un Utilisateur :

Pour ajouter un utilisateur, il suffit de cliquer sur privilèges dans la page d'accueil de PhpMyAdmin.

Privilèges des utilisateurs

Saisir le nom de la

base de données

En cliquant sur privilèges, la page suivante affichera tous les utilisateurs et leurs privilèges et pour créer un nouvel utilisateur, il suffit de cliquer sur « Ajouter un utilisateur ».

Puis remplir les informations concernant le nouvel utilisateur.

Lors de la saisie des informations pour la connexion, si on choisit «Tout serveur » pour le champ « serveur », le caractère « % » doit apparaître dans le champ de saisie (pour cela, il suffit de choisir un autre serveur puis revenir à «Tout serveur ».).

A ce niveau, il est important de bien comprendre que les privilèges que vous allez donner à l'utilisateur créé ne vont concerner que le système MySQL et en aucun cas telle ou telle base.
Maintenant si l'on veut restreindre les droits de l'utilisateur vis-à-vis de la base de données, on clique sur l'icône entourée en rouge sur la figure suivante :

Cliquer ici pour modifier les privilèges

Création d'une table sous MySQL :

Pour créer une table, il faut dans un premier temps sélectionner la base de données puis saisir le nom et le nombre de champs de la table. La figure suivante illustre tout cela :

Sélectionner la base de données saisir le nom de la table saisir le nombre de champs

Ensuite remplir les champs de la fenêtre qui suit en choisissant un nom pour le champ, son type, sa taille...etc.

Et pour insérer des données, on clique sur « insérer » pour pouvoir ajouter un ou plusieurs enregistrements.

Remarque :

Pour :

créer, modifier ou supprimer une table ;

éditer, ajouter ou supprimer des champs ;

charger ou renvoyer des données de la table ;

...etc.

on peut utiliser le langage de requêtes SQL en cliquant en haut de page de l'interface de PhpMyAdmin sur « SQL ».

Dans le champ prévu à cet effet, On saisit notre ou nos requêtes SQL, et en cliquant sur « Exécuter », la base de données sera interroger et/ou mise à jour.

2. Installation et Utilisation du JDK (Java Development Kit)

Le JDK de SUN (créateur de java) est l'outil essentiel pour programmer en java. Il permet la compilation, le débogage, et l'exécution d'applications et d'applets java.

· Après avoir installé le JDK, nous allons configurer le système d'exploitation afin que les commandes soient accessibles à partir de n'importe quel répertoire.

· Sélectionnez « Démarrez \Panneau de configuration\ Système », vous devrez obtenir une fenêtre qui ressemble à celle-ci :

· Ensuite, sélectionnez l'onglet « Avancé » et cliquez sur le bouton « Variable d'environnement »:

Sélectionnez la variable système « Path » et cliquez sur le bouton « Modifier » :

Ajoutez, à la fin de la variable « Path », le chemin d'accès au répertoire \bin du JDK installé sur votre machine (dans l'exemple : C:\Program Files\Java\jdk1.6.0_06\bin;) et cliquez sur le bouton « OK »:

NB : Le point virgule sert à séparer deux chemins d'accès différents pour la même variable d'environnement au cas où nous aurions besoin de déclarer un autre.

Ouvrez ensuite une fenêtre « DOS », en sélectionnant : « Démarrer\Exécuter\cmd » :

Vous devrez obtenir une fenêtre similaire à celle-ci :

Tapez la commande « java -version ».

Si l'installation du JDK et la configuration de la variable d'environnement « Path » ont été correctement effectuées, vous devriez voir apparaître la version du JDK installée :

Création d'un premier programme :

Ecriture d'un programme source

Le fichier source d'un programme java est un simple fichier texte que l'on peut donc écrire avec tout éditeur comme le Bloc-Notes fourni avec Windows.

Avant de créer ce fichier il est recommandé de créer le dossier de travail qui le contiendra (dans l'exemple qui suit : « C:\java »). Il suffit ensuite de recopier les lignes qui suivent et d'enregistrer le fichier obtenu dans le dossier de travail avec le nom "PremierProgram.java".

Pour notre exemple nous avons choisi de travailler avec l'éditeur de texte Note Pad++ pour les divers avantages qu'il présente :

· Vous remarquez que le menu « Langage » vous permet de spécifier le langage de programmation, dans notre cas «  Java ».

Quelques explications :

· Les parties de code situées entre // et un retour chariot sont des commentaires qui ne seront pas compilés.

· La première instruction public class PremierProgram déclare que nous créons une classe publique (accessible par tous) qui se nomme «PremierProgram». Cette classe doit être enregistrée dans un fichier de même nom et d'extension .java. Attention, java différencie les majuscules et les minuscules. La classe «premierprogram» est différente de la classe «PremierProgram», et le fichier «premierprogram.java » n'est pas l'équivalent du fichier «PremierProgram.java ».

· Tout fichier source définit une ou plusieurs classes. La définition d'une classe se fait dans un bloc d'instructions contenu entre 2 accolades.

· Notre classe «PremierProgram» contient une unique méthode annoncée par l'instruction public static void main(String args[]). Il s'agit de la méthode principale d'un programme, celle qui sera exécutée lors du lancement. Le nom et la déclaration de cette méthode ne peuvent pas être modifiés.

· La définition d'une méthode est une suite d'instructions située entre 2 nouvelles accolades. Dans le cas qui nous intéresse, la méthode main n'a qu'une seule instruction qui provoque l'affichage du message "Ca marche!", par l'intermédiaire de la méthode System.out.println. Les lignes contenant une instruction simple comme celle-ci doivent se terminer par un point-virgule.

· Le fichier source étant créé et enregistré, nous allons pouvoir passer aux phases de compilation et d'exécution.

Compilation du programme

Le compilateur java est le programme « javac.exe » contenu dans le dossier « \bin » du JDK. Pour compiler «PremierProgram.java », commencez par ouvrir une fenêtre « DOS ».

Ensuite, positionnez-vous dans le répertoire contenant le fichier à compiler. Dans l'exemple, il se trouve dans le répertoire « c:\java ». Pour y accéder, tapez la commande « cd c:\java » :

Pour compiler la classe « PremierProgram.java », tapez la commande :

« javac PremierProgram.java » :

Si tout s'est bien passé, vous obtenez dans le même répertoire un nouveau fichier«PremierProgram.class» qui est le résultat de la compilation. Pour afficher le contenu du répertoire, tapez la commande « dir » :

Malheureusement, les choses ne se passent pas toujours aussi bien. Voici quelques causes d'erreur possibles :

· Le système d'exploitation ne trouve pas le programme « javac.exe ». Il faut indiquer le chemin d'accès à ce programme (voir Configuration de Windows XP).

· La commande « javac.exe » s'exécute mais ne trouve pas « PremeirProgram.java ». Le dossier actif de votre fenêtre « DOS » n'est pas celui qui contient « PremierProgram.java ». Placez-vous dans le bon dossier (voir Compilation).

· La commande « javac.exe » s'exécute et trouve « Bonjour.java », mais écrit un message d'erreur. Il s'agit en général d'une erreur dans le fichier source. Le message d'erreur vous donne une indication sur la nature de l'erreur et sur la ligne où elle s'est produite. Essayez de comprendre. Dans la plupart des cas, il s'agit :

o d'un point-virgule oublié à la fin d'une instruction simple;

o d'une faute d'orthographe ;

o d'une confusion majuscule/minuscule ;

o d'une accolade fermante oubliée.

Il vous faut alors corriger l'erreur dans le fichier «PremierProgram.java », le sauver et le compiler à nouveau.

Exécution :

Lorsque la compilation a réussi et que le fichier « PremierProgram.class » est créé, on l'exécute en utilisant l'interpréteur « java.exe ».

A partir de la fenêtre « DOS », il suffit d'exécuter la commande « java PremierProgram». Si tout se passe bien, on voit apparaître le message prévu : « Ca marche ! » :

3. Présentation et utilisation du JDBC

JDBC (Java Data Base Connectivity) permet l'accès à des bases de données créées dans des SGBD variés, depuis un programme en Java. Il est fourni par le paquetage (package) java.sql.

L'API JDBC est presque totalement indépendante des SGBD (quelques méthodes ne peuvent être utilisées qu'avec certains SGBD mais ne doivent être utilisées qu'en cas de nécessité impérieuse pour améliorer les performances).

JDBC : C'est un intermédiaire entre le programme java et le SGBD choisi, il permet un accès :

Ø Local ou à distance, à une base de données relationnelle.

Il fonctionne selon un principe Client/Serveur, où

Ø Le Client = le programme Java, et

Ø Le Serveur = la base de données.

Principe général :

Ø Le programme Java ouvre une connexion avec le SGBD ;

Ø Il envoie des requêtes SQL ;

Ø Il récupère les résultats ;

Ø Il met à jour la BD ;

Ø Il ferme la connexion.

Contenu de java.sql :

Ce paquetage contient un grand nombre d'interfaces et quelques classes. Les interfaces constituent l'interface de programmation. JDBC ne fournit pas les classes qui implantent les interfaces.

Drivers :

Pour travailler avec un SGBD, il faut disposer de classes qui implantent les interfaces de JDBC.

Un ensemble de telles classes est désigné avec le nom de driver JDBC. Les drivers dépendent du SGBD auquel ils permettent d'accéder.

Architecture de JDBC :

Types de drivers :

Type 1: pont JDBC-ODBC

Type 2: driver qui fait appel à des fonctions natives non Java (le plus souvent en langage C) de l'API du SGBD que l'on veut utiliser.

Type 3: driver écrit entièrement en Java qui utilise le protocole réseau du SGBD

Remarque :

Dans ce qui suit, nous donneront des détails sur la configuration et l'utilisation du Driver JDBC- MySQL pour une base de données sous MySQL EasyPHP 1.8

Utilisation de JDBC :

Pour le cas pratique nous utiliserons :

Ø MySQL inclus dans EasyPHP 1.8 :

Pour la création de la base de données ;

Ø Le JDK : jdk-6u6-windows-i586-p.exe:

Pour l'execution de notre programme.

Ø Le driver JDBC : MySQL-connector-java-3.0.15-ga :

Pour l'exploitation de la base de données.

4. La création de la base de données MySQL:

Pour des raisons d'organisation, on se limite à une base de données qui contient une seule table qui sera Nommée «VolMoinsCher ». Notre base aura pour nom « tp3bd»; pour cela, on a utilisé EasyPHP1.8.

Voici un aperçu de ce que peut être notre base :

Nom de la base Nom de la table

Les champs et les

Données de la table

A partir du programme java on va accéder à la table VolsMoinsCher en consultation a travers la requête suivante :

`'SELECT Num_Vol, Dat_Vol, Heur_Vol, Tarif_Vol FROM VolMoinsCher''.

Pour plus de détails concernant la création des bases de données sous MySQL reportez-vous au Tutoriel «EasyPHP-MySQL » qui est aussi réalisé dans le cadre de ce TP.

1. Le JDK : reportez-vous à la première section.

2. Le driver JDBC :

Dans ce qui suit, on va vous montrer comment configurer le driver JDBC pour pouvoir l'utiliser dans le programme java ;

Ø Copier le fichier « mysql-connector-java-3.0.15-ga » dans un répertoire de votre choix

Dans notre cas, on le met dans le répertoire où est installé le jdk :

Ø On passe à la configuration de la variable d'environnement « ClassPath » pour pouvoir compiler les programmes qui utilisent ce Driver.

1- Bouton droit sur poste de travail :

2 -Choisissez l'onglet Avancé :

Cette figure apparait 

Propriétés

3-Puis cliquer sur variable d'environnements :

4-la fenêtre Variable d'environnements apparait :

Variable d'environnement

du JDK.

Cliquer sur Nouveau.

5-Saisissez dans le champ

« Nom de la

variable » :ClassPath.

Dans le champ « Valeur

de la variable » on écrit :

«' . ; ` + chemin + ';' ».

· + : symbole de concaténation.

· Chemin : est le chemin vers le répertoire ''mysql-connector-java-3.0.15-ga'' concaténé avec

le nom du fichier exécutable  Jar après un antislash bien sûr.

Pour bien comprendre cette écriture procédez comme suit :

Allez dans le répertoire jdbc ;

Entrez dans le répertoire ''mysql-connector-java-3.0.15-ga.

Copier le chemin qui apparait dans le champ adresse comme le montre la figure suivante :

Copiez ce chemin

Dans ce répertoire vous trouverez le fichier qui a l'indication : « Exécutable Jar File », copiez son nom.

En résumé : Dans notre cas « chemin » sera égal a : Il ne faut pas oublier l'antislash

 «  .; C:\Program Files\Java\jdbc\mysql-connector-java-3.0.15-ga \ mysql-connector-java-3.0.15-ga-bin.jar ; » 

Chemin vers le dossier le nom du fichier

Copiez le tout dans le champ  « Valeur de la variable »

ü puis appuyez sur ok ;

ü Appuyez une autre fois sur ok  pour quitter la fenêtre `' Variables d'environnements'';

ü Appuyez une dernière fois sur ok pour ; quitter la fenêtre `'Propriétés système `'.

2. Utilisation de JDBC

Il ne nous reste à présent qu'à décrire les différents fragments du code qui nous permettent la connexion à notre base de données.

.1 Déclaration du pilote JDBC :

Notez l'instruction qui importe

L'API JDBC-SQL

Ø L'appel à la classe forName déclenche un chargement dynamique du pilote.

Ø Un programme peut utiliser plusieurs pilotes, un pour chaque base de données.

2.2 Connexion à la base de données :

Voila le code de connexion à la base : Nom de la base

La connexion à la base se fait à l'aide de la méthode getConnection (p1, p2, p3), membre de la classe DriverManager. Elle est appelée avec trois paramètres qui sont :

Ø p1 : L'adresse ou se trouve la base de données.

Ø p2 = `'root `': Le nom de l'administrateur de la base.

Ø p3 : '' '' : le mot de passe, ici notre base n'a aucun mot de passe.

2.3 Les traitement des requêtes et l'affichage des résultats en JDBC :

Pour exécuter notre requête sur notre base de données a partir du programme java, on fait appel à la classe Statement, et à sa méthode membre executeQuery (String) avec comme unique paramètre notre requête SQL.

2.4 La classe java.sql.ResultSet

Une fois la requête est exécutée la classe ResultSet nous offre tous les moyens qui nous permettent de récupérer les données afin d'effectuer des éventuels traitements sur la base de donnée.

Dans notre exemple le résultat est récupéré dans la variable resultat, instance de la classe ResultSet, on peut imaginer son état comme suit :

Les champs apparaissent dans un ordre analogue à celui de la requête SQL

 

Num_Vol

Dat_Vol

Heur_Vol

Tarif_Vol

 

Resultat1

001/508

2008/06-08

10 :00 :00

11000

 

Resultat2

002/608

2008-06-17

08 :00 :00

12000

 

1 2 3 4

resultat.next()

La méthode next() permet de passer au tuple suivant (il existe aussi prior(),first(), last(), ...).

La méthode getXxxx (int p)  nous permet l'accès à la valeur d'un champ de l'enregistrement courant dans resultat, ce dernier étant spécifié par le paramètre p qui est l'ordre de l'apparition du champ dans la clause SELECT da la requête SQL. Quant à Xxxx c'est le type

Java correspondant au type du champ dans SQL.

Le tableau ci-dessus donne quelques types SQL est leurs correspondance en Java :

SQL

CHAR

VARCHAR

LONG VARCHAR

BIT

INTEGER

REAL

FLOAT

DATE

TIME

Java

String

String

String

boolean

Int

Float

double

Date

Time

4. Fermeture de la connexion :

Une fois qu'on terminé avec la base de données on doit fermer la connexion grâce à la méthode close (), membre de la classe Connection.

Voici la structure générale de notre exemple :

Essayons à présent de compiler et d'exécuter notre programme ;

Ouvrez une fenêtre MS-DOS. Voici le résultat de l'exécution :

Repertoire de travail

dir affiche le contenu d'un répertoire.

Notre programme est

Commande de compilation

Commande d'exécution

Resultat Affiché

Si notre requête SQL était :

`'SELECT Num_Vol, Dat_Vol, Heur_Vol, Tarif_Vol FROM VolMoinsCher

WHERE VolMoinsCher.Tarif_Vol < 12''.

Le résultat sera : Exécution précédente

Réexécution

Résultat affiché ;

Attention !!:

Veuillez respecter la hiérarchie suivante lors de l'installation des logiciels/matériels suivants :

1. JBuilder Foundation 2005.

2. Le lecteur de carte à puce (sans insérer le dongle)

3. GemXplore.

4. Insérer le dongle.

PARTIE II : Réalisation

Introduction :

Présentation du projet

Notre projet consiste en la création d'une application exploitant la technologie javacard pour la recherche du billet d'avion le moins cher possible. Pour ce faire, on va introduire des bases de données qui représentent chacune une compagnie aérienne donnée.

L'objet de ce rapport est l'étude de l'ingénierie logicielle permettant le développement d'applications de carte à puce par le billet de carte java. Il est destiné aux personnes qui désirent étudier les éléments essentiels de la technologie des cartes à puce et de la programmation des cartes java. Au cours de ce rapport, on se concentre sur les méthodes impliquées pendant le processus de développement d'une application javacard.

Ce rapport est organisé comme suit:


· Section I : Création des bases de données, projet JavaCard et Applet :

1. Création des bases de données nécessaires pour l'application.

2. Création du projet JavaCard.

3. Création de l'applet.


· Section II : Création & Description de l'application :

- Résumé.

- Conception.

- Chargement de l'applet sur la carte (avec JCardManager)

- Le code source de l'applet.

- Le source de l'application cliente (voir annexe).


· Section III : Tests & Exécution.


·Conclusion.


· Bibliographies.

Section I : Création des bases de données, projet JavaCard

I-1 Création des bases de données nécessaires pour l'application 

On a utilisé dans ce projet une base de données nommée Compagnie qui contient deux tables simulant ainsi deux agences aériennes : air_algerie et aigle_azur. Pour cela on a opté pour un SGBD Mysql intégré à EasyPHP dont l'installation est décrite précédemment.

Voici le code SQL pour la création des deux tables :

- phpMyAdmin SQL Dump

-- version 2.6.1

-- http://www.phpmyadmin.net

--

-- Serveur: localhost

-- Généré le : Dimanche 25 Mai 2008 à 15:51

-- Version du serveur: 4.1.9

-- Version de PHP: 4.3.10

--

-- Base de données: `compagnie`

--

-- --------------------------------------------------------

--

-- Structure de la table `aigle_azur`

--

CREATE TABLE `aigle_azur` (

`nomcompagnie` varchar(30) NOT NULL default '',

`itineraire` varchar(30) NOT NULL default '',

`prix` int(10) NOT NULL default '0',

`dateheure` datetime NOT NULL default '0000-00-00 00:00:00'

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--

-- Contenu de la table `aigle_azur`

--

INSERT INTO `aigle_azur` VALUES (`aigle_azur, 'alger-tunis', 120, '2008-05-27 00:30:00');

INSERT INTO `aigle_azur` VALUES (' aigle_azur ', 'alger-tunis', 119, '0000-00-00 00:00:00');

INSERT INTO `aigle_azur` VALUES (' aigle_azur', 'alger-tunis', 110, '2008-05-27 00:30:00');

INSERT INTO `aigle_azur` VALUES (' aigle_azur ', 'alger-Dubai', 114, '2008-05-20 12:00:00');

INSERT INTO `aigle_azur` VALUES (' aigle_azur', 'alger-bruxelles', 112, '2008-06-01 15:30:00');

INSERT INTO `aigle_azur` VALUES (' aigle_azur `, 'alger-bruxelles', 88, '2008-06-01 16:30:00');

INSERT INTO `aigle_azur` VALUES (' aigle_azur ', 'alger-Athènes', 99, '2008-05-15 12:00:00');

-- --------------------------------------------------------

--

-- Structure de la table `air_algerie`

--

CREATE TABLE `air_algerie` (

`nomcompagnie` varchar(30) NOT NULL default '',

`itineraire` varchar(30) NOT NULL default '',

`prix` int(10) NOT NULL default '0',

`dateheure` datetime NOT NULL default '0000-00-00 00:00:00'

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--

-- Contenu de la table `air_algerie`

--

INSERT INTO `air_algerie` VALUES (' air_algerie ', 'alger-paris', 121, '2008-06-01 13:00:00');

INSERT INTO `air_algerie` VALUES (`air_algerie', 'alger-paris', 119, '2008-06-01 14:00:00');

INSERT INTO `air_algerie` VALUES (' air_algerie', 'alger-Athènes', 123, '2008-05-27 12:30:00');

INSERT INTO `air_algerie` VALUES (' air_algerie', 'alger-Ryadh', 100, '2008-07-29 00:00:00');

I-2  Création du projet JavaCard :

Après avoir lancé le JBuilder, cliquez sur File/New, et dans Object Gallery choisissez Java Card/Java Card Project.

Il y' a 7 étapes à suivre pour la création du projet JavaCard. On décrit les étapes 2, 3 et 5 (Pour les autres, vous devez laisser les valeurs proposées par défaut):

· Spécification du package AID du projet (étape 2).

· Choix du Card type (étape 3).

· Choix de l'environnement JCardManager (étape 5).

I-3  Création de l'applet:

Après avoir créé le projet cliquer sur File/New, et dans Object Gallery choisissez Java Card/Java Card Applet. Il y'a 4 étapes à suivre on décrit les étapes 1 et 2 (Pour les autres, vous devez laisser les valeurs proposées par défaut):

· Spécification du package AID de l'applet et son applet AID (étape 1).

· Applet AID et instance AID (étape 2).

Section II : Création & Description de l'application

II-1 Résumé

Ce projet orienté sur la technologie Javacard consiste à réaliser une application de recherche de billet d'avion le moins cher, dont le fichier .cap sera délivré et installé sur la carte, et un programme client java sous forme d'une application avec interface graphique permettant la communication avec la carte.

II-2 Conception

Nous avons nommé notre projet Application JavaCard, il a été réalisé en utilisant JBuilder, le JDK et GemXplore.

Il contient cinq classes :

· Une classe nommée Interface contenant les composants suivants : JPanel, les JLabels, JTextArea, Buttons ainsi une classe Main permettant de lancer notre application.

· Une classe nommée Connecting pour la connexion aux bases de données et récupération des prix selon un itinéraire choisi. Elle contient les événements et les actions associés à notre application en particulier cette classe contient des variables pour lancer les méthodes correspondantes au choix de l'utilisateur.

· Une classe nommée ApduCommands, elle permet la communication avec la carte en définissant toutes les fonctions d'interface qui puisse être appelées par le terminal qui est implémenté dans la classe Terminal.

· Une classe nommée Terminal qui nous permet d'ouvrir la communication entre l'application cliente (l'interface) et l'application serveur (l'applet).

· Une classe nommée Tool pour manipuler, convertir et afficher les adresses suivant leur représentation (byte, notation hexadécimale en deux quartets sous forme de chaine, etc.).

II-3 Chargement de l'applet sur la carte

II-3-1 Lancement de JcardManager

II-3- 2 La fenêtre principale de JCardManager

II-3-3 Choix de l'applet pour être chargé et installé dans la carte

Pour charger l'applet dans la carte, on lance le JCard Manager et on s'assure que le lecteur de carte est bien sélectionné dans cette fenêtre. Ensuite, et dans la liste OP du USim Card R5, on sélectionne la commande Quickload. Cette commande permet de charger et d'installer l'applet. Dans le cadre File, on clique sur le bouton select pour sélectionner le fichier CAP à charger et installer en même temps.

Pendant que le chargement continue, les messages de statut sont sans interruption affichés dans la zone message de la fenêtre de JCard Manager.les dernières lignes indiquent que le module a été téléchargé avec succès.

NB : le fichier mypackage.cap est obtenu après compilation de l'applet avec Jbuilder, il se trouve dans le dossier (oncard\mypackage\javacard) du projet JavaCard.

II-3- 4- Sélection de l'applet

Pour sélectionner l'applet après avoir lancé le JCard Manager, on choisit dans la liste decommandes OP, la commande Select. Ensuite, on tape l'AID de l'applet et on clique sur Go pour envoyer la commande à la carte. Dans le cas du simulateur, le résultat de la commande est affiché simultanément dans la zone de messages du Jcard Manager.

II-3- 5- Effacement du paquetage et de l'applet

Pour effacer l'applet de la carte, on doit sélectionner à partir de la liste des commandes OP, la commande Delete. Dans la case identifier of the package or applet to delete, on saisit tout d'abord le code AID de l'applet après on clique sur Go ; ensuite, on tape le code AID du paquetage suivi encore du bouton Go. Cet ordre doit être respecté pour recevoir dans la zone de messages le code de succès.

II-3-6 Explication et exécution des fonctions de notre applet

II-3-6-1 code source de l'applet et explication

Voici la structure générale de notre applet

NB : Vous trouverez en annexe le programme source complet.

II-3-6.2 Exécution du programme

6.2.1 Lecture du contenu de la carte

« CLA » : décrit la classe d'instruction indiquant la structure et le format pour une catégorie de commande APDU. D'après le code, la constante a été déclarée comme (byte) 0x80.

static final byte APP_CLA = (byte) 0x80;

« INS » :représente l'instruction de la commande. Par ailleurs, il en existe trois dont celle-ci (lecture du prix de la carte) qui est déclarée comme (byte) 0x10.

final static byte LECT_INS = (byte) 0x10;

« Lc » : indique la longueur des données de commande.

« Le » : indique la longueur prévue des données de réponse. Dans ce cas, aucune réponse n'est attendue.

Le prix actuel dans la carte est de 127 d'après la réponse 7F

6.2.2 Comparer le prix avec celui de la carte

« CLA » : décrit la classe d'instruction indiquant la structure et le format pour une catégorie de commande APDU. D'après le code, la constante a été déclarée comme (byte) 0x80.

static final byte APP_CLA = (byte) 0x80;

« INS » : représente l'instruction de la commande. Par ailleurs, il en existe trois dont celle-ci (comparaison avec le prix qui existe dans la carte) qui est déclarée comme (byte) 0x20.

final static byte COMP_INS = (byte) 0x20;

« Lc » : indique la longueur des données de commande.

« Le » : indique la longueur prévue des données de réponse. Dans ce cas, aucune réponse n'est attendue.

« Data » : indique le prix à envoyer à la carte pour être comparé avec celui qui existe dans la carte.

6.2.3 Réinitialisation du prix de la carte

CLA décrit la classe d'instruction indiquant la structure et le format pour une catégorie de commande APDU. D'après le code, la constante a été déclarée comme (byte) 0xB0.

static final byte APP_CLA = (byte) 0x80;

INS représente l'instruction de la commande. Par ailleurs, il en existe trois dont celle-ci (réinitialisation du prix de la carte à la valeur maximale) qui est déclarée comme (byte) 0x20.

final static byte INIT = (byte) 0x30;

Lc indique la longueur des données de commande.

Le indique la longueur prévue des données de réponse. Dans ce cas, aucune réponse n'est attendue.

Section III : Tests & Exécution.

III.1 Création du fichier jar (Java ARchive) :

Ce fichier contiendra l'exécutable de l'application. Pour créer cette archive, on suit les étapes suivantes :

1- créer un nouveau dossier pour contenir tous les fichiers nécessaires pour la création de l'archive JAR.

Ce dossier contiendra :

· Tous les fichiers .class à savoir : Interface.class, Connecting.class, Terminal.class, ApduCommands.class et Tool.class.

Tous ces fichiers sont générés après compilation de chacune des cinq classes de l'application.

· Le fichier manifest (fichier avec extension .mf) qui contient le nom du connecteur, la classe qui contient la méthode « main » et éventuellement la version et le nom du concepteur.

La figure suivante montre le fichier manifest de l'application :

Ces deux lignes sont facultatives.

· Le connecteur JDBC (mysql-connector-java-3.0.15-ga-bin) qui permet la connexion à la base de données avec un code source Java.

2- Aller dans l'invite de commandes.

3. Accéder au répertoire créé précédemment pour contenir l'archive JAR avec la commande « cd » sur l'invite de commande.

4. exécuter la commande suivante :

« jar cmvf nom_ du_fichier_manifest.mf nom_de_lexécutable.jar *.class »

5. Après exécution de cette commande l'exécutable de l'application sera créé dans le même dossier créé initialement.

6. Si on double-clique sur cet exécutable créé (l'archive JAR) l'application se lancera.

III-2 Interface de notre application

III-3 Connexion à la carte, détection du lecteur de carte et  récupération de l'ATR 

III-4 Choix de la destination

III-5 Affichage du résultat

Conclusion :

L'objectif de notre travail était de concevoir et de réaliser une application permettant la recherche du billet d'avion le moins cher entre plusieurs agences de voyage en utilisant la technologie JavaCard.

La réalisation de ce travail nous a permis :

· D'acquérir des connaissances sur la technologie javacard et les langages java, PHP, MYSQL, le langage de modélisation UML, et aussi de se familiariser avec plusieurs logiciels tels que JBuilder, JCardManager,

Perspectives

Nous espérons par ce modeste travail apporter des connaissances basiques sur la technologie JavaCard et l`outil JCardManager qui est un environnement offrant la possibilité d'exploitation de la carte et sa mise en oeuvre réelle contrairement aux autres outils de simulation.






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Piètre disciple, qui ne surpasse pas son maitre !"   Léonard de Vinci