Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Algorithmique > La cryptographie asymétrique : RSA > La Pratique > GMP - "Arithmetic without limitation" > Lecture du tutoriel

GMP - "Arithmetic without limitation"

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : TuxWeb
Note : 18 / 20 (3 votes)
Visualisations : 2 143

Plus d'informations Plus d'informations
Cette partie présente l'intérêt d'une telle bibliothèque et explique comment l'installer (sous GNU/Linux, et Windows), et finit par la création d'un petit programme d'exemple...
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

L'intérêt de cette bibliothèque

Euh... une bibliothèque ? mais c'est pour quoi faire ?

La bibliothèque GMP est une bibliothèque qui va nous permettre de gérer de très très grand nombre, et d'effectuer tout un tas de calculs rapidement.

Un "double" ou un "float" peut très bien pu suffir pour gérer nos grands nombres, non ? Pas la peine de prendre cette... GMP !

La réponse est non (vous deviez vous en douter ^^). Le type "double", le plus grand des types primitifs, a pour extrémums -1.7 \times 10^{308} et 1.7 \times 10^{308}. Or, je sais pas si vous vous rappelez, mais dans le chapitre sur le déchiffrage, on avait à un moment donné ce calcul : 386^{4279}. Autant vous dire que le résultat dépasse largement le type "double". (Même un "unsigned double" ne ferait pas l'affaire pour ceux qui y auraient penser...)

Pour la petite histoire, j'ai calculé 386^{4279} avec la bibliothèque GMP, et le résultat est composé d'exactement 11069 chiffres, un double aurait rendu l'ame bien avant d'afficher le résultat ^^ . On ne peut donc pas se passer d'une telle bibliothèque pour faire notre programme.

Passons à l'installation :p

Installation sous GNU/Linux

Normalement, la bibliothèque GMP est déjà installée sur votre machine si vous avez suivi le tutoriel dans l'ordre. Si vous l'avez installé, vous pouvez aller directement à la dernière partie de ce chapitre. Sinon ouvrez une console et copiez-y :

Code : Console
cd ~
mkdir RSA
cd RSA
wget http://ftp.sunet.se/pub/gnu/gmp/gmp-4.2.3.tar.gz
tar xfz gmp-4.2.3.tar.gz
cd gmp-4.2.3
./configure --enable-cxx
make
make check
sudo make install
cd ..
rm -rf gmp-4.2.3 gmp-4.2.3.tar.gz
cd /usr/lib/
sudo ln -s /usr/local/lib/libgmpxx.so.4 libgmpxx.so.4
cd ~/RSA


Voilà, c'est installé ^^

Installation sous Windows

Préparation...



Pour installer la bibliothèque GMP sous Windows, nous allons installer une sorte de paquetage, composé d'un shell (une console en gros :p ) et de plusieurs petits programmes, qui va nous permettre de compiler les sources de la bibliothèque, pour que l'on puisse ensuite s'en servir... Ce paquetage ce nomme MSYS, et est disponible en téléchargement ici.

Pour continuer, vous devez avoir MinGW d'installé sur votre machine ! Si ce n'est pas le cas, vous devez le faire. (Si vous avez Dev-Cpp ou Code-Blocks, il doit être présent...)


Allez dans le répertoire d'installation de MinGW, puis dans le dossier "bin". (Ce répertoire est pour ma part "C:\MinGW", mais il peut être "C:\Dev-Cpp", tout dépend de votre machine) Dans ce répertoire "bin", vous devriez trouver un fichier nommé "mingw32-make.exe". Copier-le dans ce même dossier sous le nom de "make.exe".

Il faut maintenant installer MSYS. Lancer l'exécutable téléchargé. Les options par défaut devraient faire l'affaire. A la fin de l'installation, une console s'ouvre et vous pose quelques questions. Répondez par "y" aux deux premières questions. On vous demande ensuite où est le dossier d'installation de MinGW. Copiez-y alors l'adresse de ce dossier.

Voici un screen de ce que j'ai :

Image utilisateur


Répondez aux questions suivantes par "y" puis Entrée.

Une fois ceci fait, nous pouvons télécharger la bibliothèque proprement dite. Rendez-vous sur la page de téléchargement du site, à savoir ici. Téléchargez l'archive de la dernière version de la bibliothèque. Extrayez ensuite l'archive dans un dossier facile d'accès... "C:\gmp" par exemple.


Compilation...



Nous pouvons dorénavant compiler la bibliothèque. Pour ce faire, lancez MSYS. (Double-cliquez sur l'icône MSYS de votre bureau pour le lancer.) Une console s'ouvre...

Déplacez-vous dans le dossier où sont les sources de GMP, grâce à la commande "cd", ce qui donne : cd c:/gmp

Ensuite il faut préparer et vérifier si la compilation de la bibliothèque est faisable. Cette préparation se fait avec la commande suivante : ./configure --prefix=/c/dev-cpp --enable-cxx

Note : Remplacez "c/dev-cpp" par le chemin correspondant à votre IDE. Si le chemin de votre IDE est "C:\Code-Blocks\" tapez "c/Code-Blocks"

Laissez travailler. Une fois cela fini (Il ne devrait pas y avoir d'erreur...) On peut compiler... La compilation se fait avec la commande : make. La compilation peut être longue... Il faut être patient ^^ . A la fin de la compilation, tapez make check puis make install, pour installer la bibliothèque. (Encore un peu de patience... ^^ )

Normalement, rendu à ce point, la bibliothèque devrait être (correctement) installée.

(Si tout c'est bien déroulé, vous devriez avoir dans le dossier "include" de votre IDE les fichiers "gmp.h" et "gmpxx.h")

Créer un projet avec notre nouvelle bibliothèque

Notre premier programme



Afin de voir si tout fonctionne correctement, on va faire un petit programme (très simple) qui affiche une liste de nombres premiers...

Créez un nouveau projet et dans le fichier "main.cpp" copiez le code suivant : (Je vous expliquerais plus en détail comment utiliser cette bibliothèque, ce code est juste fait pour vérifier si le tout marche, et montrer comment on link la bibliothèque...)

Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* Ce code a pour but d'afficher, grâce à une boucle, un nombre déterminé de nombres
 premiers */

#include <iostream>
#include <gmpxx.h> //On inclut la bibliothèque gmp

#define MAX 10 //On affichera MAX nombres premiers...

int main(int argc, char **argv)
{
	mpz_class a(0); //On créé un objet mpz_class nommé a. On l'initialise à zéro.

	//On va calculer puis afficher MAX nombres premiers
	for(int i = 0 ; i < MAX ; i++)
	{
		//Cette fonction attribue à "a" le premier nombre premier après "a"
		mpz_nextprime(a.get_mpz_t(), a.get_mpz_t());

		std::cout << a << " "; //On affiche le nombre a.
	}

	std::cout << std::endl; //On saute une ligne avant de quitter

	return 0;
}


Compiler notre code



Avec un IDE



Si vous utilisez un IDE, vous devez linker la bibliothèque avec le fichier "libgmpxx.a" situé dans le dossier "lib" de votre IDE, puis avec "libgmp.a" (L'ordre est important !). Avec Dev-Cpp, j'ai ceci : (Cliquez sur l'image pour la voir en plein écran)

Image utilisateur


Comme vous pouvez le constater, j'ai placé sur l'image des petits numéros, ils vous permettent de vous repérer quant à l'ordre des opérations à effectuer.

Une fois cela fait, vous pouvez ensuite compiler... Tout devrait bien se passer.


Avec un makefile



Si vous utilisez makefile ou la ligne de commande pour compiler, vous devez linker la bibliothèque avec vote programme en tapant : -lgmpxx -lgmp. Ce qui donne par exemple : g++ -o executable main.cpp -lgmpxx -lgmp

Et voilà, votre programme devrait compiler et fonctionner correctement. Il devrait afficher ceci :

Code : Console
2 3 5 7 11 13 17 19 23 29

Nous venons d'installer la bibliothèque GMP, dans le prochain chapitre, nous verrons quelques fonctions de bases de cette bibliothèque, et nous attaquerons notre programme de chiffrage.

Vous pouvez, si le cœur vous en dit, d'ores et déjà consulter la documentation de GMP, disponible au format PDF, ici.
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 05/04/2008 à 19:18:34
Modifié : le 20/09/2008 à 12:31:08
Avancement : 100%
Licence : Creative Commons BY-SA

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 315 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0727s (0.0568s)