Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2705 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

nombres premiers & librairie GMP (mpz_probab_prime_p)

n°990890
initial
Posté le 23-02-2005 à 10:49:25  profilanswer
 

Reprise du message précédent :
bon... OK, tu m'as convaincu Evadream. :)

mood
Publicité
Posté le 23-02-2005 à 10:49:25  profilanswer
 

n°1003654
initial
Posté le 07-03-2005 à 15:21:16  profilanswer
 

Quelqu'un a des bouts de code qui utilisent GMP? Je cherche de la littérature GMP pour acquérir plus vite les subtilités de cette librairie...
Merci!

n°1052572
oulddah
Posté le 19-04-2005 à 17:23:33  profilanswer
 

volà un programme complet por l'encyption par RSA  
mais aider mois comment utiliser cette bibiotheque GMP.h sous windows
/* Programme rsa
 
   Implémentation de l'algorithme à clé publique, calcul de paramètres de
   chiffrement et exemple.
 
   Pour les algorithmes de calcul sur les grands entiers, qui n'existent pas
   en C standard, on peut les implémenter soi-meme, la référence absolu sur
   le sujet étant le bouquin de D. Knuth, "The Art Of Computer Programming,
   volume 2, Seminumerical algorithms".
 
   Si on ne veut pas s'embeter, on peut aussi utiliser une bibliothèque qui
   intègre ces fonctions, par exemple GMP (GNU Multi Precision), cf
   http://www.swox.com/gmp.
 
   Attention de bien prendre la dernière version, les précédentes ont des
   bugs dans la gestion des nombres aléatoires et vous risquez de perdre du
   temps pour rien... j'en sais quelque chose !!
 
   Une autre alternative consiste à utiliser Java, qui contient d'origine la
   classe math.BigInteger pour gérer les grands entiers.
 
   La chose importante à noter, dans ce listing, c'est le nombre de lignes qui
   font réellement du chiffrement et du déchiffrement (1 ligne à chaque fois),
   alors que tout le reste du programme ne sert qu'à l'initialisation.
 
*/
 
#include <stdio.h>
#include "gmp.h"
 
/* Variable d'état pour le générateur aléatoire */
gmp_randstate_t etat;
 
/* Fonction aleatoire  
   renvoie un grand nombre aléatoire qui a env. taille chiffres */
 
void aleatoire(mpz_t nombre, int taille)
{
  unsigned long int i;
  mpz_t deuxn;  
 
  mpz_init(deuxn);
 
  i = (taille+1)*4;
 
  /* Calcul un nombre aléatoire entre 0 et 10^(n+1) */
  mpz_urandomb(nombre, etat, i);
 
  /* Résultat minimum: 10^taille */
  mpz_ui_pow_ui(deuxn, 10, taille);
 
  /* Ajoute les deux résulats */
  mpz_add(nombre,nombre,deuxn);
 
  mpz_clear(deuxn);
}
 
/* Fonction premier */
 
void premier(mpz_t premier, int taille)
{
  /* Prend un nombre au hasard de taille donnée */
  aleatoire(premier, taille);
 
  /* Prend le nombre premier qui suit notre nombre au hasard */
  mpz_nextprime(premier, premier);
}
 
/* Fonction phi
   calcule phi(pq)=(p-1)(q-1) */
 
void calculephi(mpz_t phi, mpz_t p,mpz_t q)
{
  mpz_t a;
  mpz_t b;
 
  mpz_init_set(a, p);
  mpz_init_set(b, q);
 
  mpz_sub_ui(a, a, 1);
  mpz_sub_ui(b, b, 1);
 
  mpz_mul(phi, a, b);
 
  mpz_clear(a);
  mpz_clear(b);
}
 
void cles(mpz_t a, mpz_t b, mpz_t p, mpz_t q, int taille)
{
  mpz_t phi;
  mpz_t temp;
     
  mpz_init(phi);
  mpz_init(temp);
 
  /* Calcul de phi */
  calculephi(phi,p,q);
   
  /* Choix de a, clé publique, avec (a,phi(n))=1 */
  do {
    aleatoire(a, taille);
    mpz_gcd(temp, a, phi);
  } while (mpz_cmp_ui(temp,1)!=0);
 
  /* Calcul de b, clé privée correspondante */
  mpz_invert(b, a, phi);
}
 
int main() {
  int taille;
  unsigned long int graine;
  mpz_t n,p,q,phi,a,b, clair, code, resultat;
 
  mpz_init(p);
  mpz_init(q);
  mpz_init(n);
  mpz_init(a);
  mpz_init(b);
  mpz_init(clair);
  mpz_init(code);
  mpz_init(resultat);
 
  printf("Graine pour le générateur aléatoire ? " );
  scanf("%d",&graine);
  printf("Taille de p et q ? " );
  scanf("%d",&taille);
  gmp_randinit(etat, GMP_RAND_ALG_DEFAULT);
  gmp_randseed_ui(etat, graine);
  mpz_urandomb(clair, etat, 10);
 
  /* Choix de p et de q différents l'un de l'autre */
 
  do {
    premier(p, taille);
    premier(q, taille);
  }  while (mpz_cmp(p, q)==0);
 
  /* Calcul de n */
  mpz_mul(n,p,q);
 
  /* Calcul des clés */
  cles(a,b,p,q, taille);
 
  /* Affichage de p,q,n,a,b */
 
  printf("\n\nParamètres de chiffrement :\n\n" );
  printf("p = " ); mpz_out_str(stdout, 10, p); printf("\n" );
  printf("q = " ); mpz_out_str(stdout, 10, q); printf("\n" );
  printf("n = " ); mpz_out_str(stdout, 10, n); printf("\n" );
  printf("a = " ); mpz_out_str(stdout, 10, a); printf("\n" );
  printf("b = " ); mpz_out_str(stdout, 10, b); printf("\n" );
     
  printf("\n\n" );
 
  /* Choix d'un message aléatoire et impression */
  aleatoire(clair, taille);
  printf("Message à chiffrer: " ); mpz_out_str(stdout, 10, clair); printf("\n" );
 
  /* Calcul du message chiffré et impression */
  mpz_powm(code, clair, a, n);
  printf("Message chiffré: " ); mpz_out_str(stdout, 10, code); printf("\n" );
 
  /* Calcul du message déchiffré et impression */
 
  mpz_powm(resultat, code, b, n);
  printf("Message déchiffré: " ); mpz_out_str(stdout, 10, resultat); printf("\n" );
 
}
 


---------------
oualataSoft
n°1167541
NullDragon
Posté le 02-08-2005 à 09:33:27  profilanswer
 

Bonjour, je voudrais recompiler la lib de gmp, je suis sous vc++ 6.0, est-ce que quelqu'un saurait me guider ? :)
 
Quand je regarder les sites ou c'est expliqué, c'est pour une compilation sous linux et je suis sous windows 2000.

n°1182237
initial
Posté le 23-08-2005 à 13:19:46  profilanswer
 

pourquoi vouloir recompiler la lib de gmp alors que des versions déjà compilées sont disponibles en téléchargement sur internet?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
premiers pas J2EE (Apache + Tomcat + Eclipse)librairies des grands nombres : GMP vs NTL ?
[C++/Qt] erreur de librairie time.hprobleme avec librairie gtk sous linux
Manipulation des nombres complexesUtiliser la librairie GD avec DEV C++
Utiliser une librairie graphiquetrier 3 nombres
filigrane librairie gd 
Plus de sujets relatifs à : nombres premiers & librairie GMP (mpz_probab_prime_p)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)