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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| #include <gmp.h>
int main()
{
// Creation du nombre p premier
mpz_t p;
mpz_init(p);
mpz_set_str(p, "53148645465464655554531235415323541545473", 10);
// Creation du nombre q premier
mpz_t q;
mpz_init(q);
mpz_set_str(q, "186897845264145246545614561314355142325624673", 10);
// Creation du nombre n = p x q
mpz_t n;
mpz_init(n);
mpz_mul(n, p, q);
// Creation du nombre m = (p-1)x(q-1)
mpz_t m;
mpz_init(m);
mpz_t pMoinsUn;
mpz_init(pMoinsUn);
mpz_sub_ui(pMoinsUn, p, 1);
mpz_t qMoinsUn;
mpz_init(qMoinsUn);
mpz_sub_ui(qMoinsUn, q, 1);
mpz_mul(m, pMoinsUn, qMoinsUn);
// Creation du nombre c premier avec m
mpz_t c;
mpz_init(c);
mpz_set_str(c, "120915111914154564566564172654564654156154134434456145465514565645458829", 10);
mpz_t pgcd;
mpz_init(pgcd);
mpz_gcd(pgcd, m, c); // Si c est bien premier avec m, pgcd = 1
// Affichage de la cle public + controle du PGCD
gmp_printf("PGCD(M,C) : %Zd\n", pgcd);
gmp_printf("M : %Zd\n\n", m);
gmp_printf("Cle publique (N,C) :\n%Zd %Zd\n", n,c);
// Creation du nombre u tel que (c x u) + (m x v) = 1
// On ne retien pas v
// On s'aide de bezout
mpz_t u;
mpz_init(u);
mpz_set_str(u, "2324476463418905151953140273072367204177423816843576844674726052247774901225667571013", 10);
gmp_printf("Cle privee (U,N) :\n%Zd %Zd\n\n", u,n);
// ================= //
// TOUT EST PRET ICI //
// ================= //
mpz_t timestamp;
mpz_init(timestamp);
mpz_set_str(timestamp, "1300765747", 10);
gmp_printf("Timestamp : %Zd\n\n", timestamp);
// Cryptage avec la cle prive
mpz_t timestampCrypte;
mpz_init(timestampCrypte);
mpz_powm(timestampCrypte, timestamp, u,n);
gmp_printf("Timestamp crypte : %Zd\n\n", timestampCrypte);
// Decryptage avec la cle public
mpz_t timestampDecrypte;
mpz_init(timestampDecrypte);
mpz_powm(timestampDecrypte, timestampCrypte, c,n);
gmp_printf("Timestamp decrypte : %Zd\n", timestampDecrypte);
return 0;
} |
Partager