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.
|