Notes sur les fonctions internes de Mupad utilisées
b := 95:
pp := 5000:
qq := 2000:
nom := "Tartempion2": // mettez votre nom !!
// =========================================================
p := nextprime(pp):
q := nextprime(qq):
n := p*q:
phi_n := (p-1)*(q-1):
// affiche les paramètres d'encryptage
hold(p)=p, hold(q)=q;
hold(n)=n;
hold(n) = factor(n);
print("Mupad a factorisé " . n . "sans difficulté!"):
hold(phi_n) = phi_n;
phi_n = factor(phi_n);
print(Typeset, "Choisir maintenant pour e un nombre premier avec " .
phi_n);
e := 3:
d := powermod(e, -1, phi_n):
// inverse de e modulo phi_n
print(Typeset, hold(e)=e,hold(d)=d);
// Afficher mon code privé
print(NoNL, "\n=============================="):
print(NoNL, "\nClé privée : \n n = " . n . " ;\n");
print(NoNL, " d = " . d . " ; \nAuteur : " . nom);
// Annoncer son code public (texte à envoyer)
print(NoNL, "\n=============================="):
print(NoNL, "\nVoici ma clé publique : \n n = " . n . " ;\n");
print(NoNL, " e = " . e . " ; \nAuteur : " . nom);
print(NoNL, "\n==============================\n");
hold(_mod)(hold(_mult)(e, d),phi_n) = (e * d) mod phi_n;
M0 := 123456;
M1 := powermod(m0,e,n); // crypter le message avec e
M2 := powermod(m1,d,n); // décrypter le message crypté avec d
message := "Sevelin 44";
nombres := numlib::toAscii(message);
// décaler la numérotation de 32
nombres := map(nombres, x->x-32);
(copier le résultat précédent et mettre les crochets manuellement)
blocs := [[51, 69, 86] , [69, 76, 73], [78, 0, 20], [20, 63,
63]];
grandsnombres := [51*b^2 + 69*b + 86 , 69*b^2 + 76*b + 73, 78*b^2 +
0*b + 20, 20*b^2 + 63*b + 63];
nombretest := 466916;
powermod(nombretest,e,n):
print(%):
powermod(1507266, d, n);
grandsnombrescryptes := [powermod(x, e, n) $ x in
grandsnombres];
qr := x->[x div b, x mod b];
// donne comme résultat la liste [quotient, reste]
// [1507266, 4289549, 4975755, 166204]
qr(1507266);
........................
qr(15865);
...........................
qr(167);
............................
qr(1);
1*b^3+72*b^2+0*b+91;
x := 1507266:
x := qr(x): print(x[2]):
x := qr(x[1]): print(x[2]):
x := qr(x[1]): print(x[2]):
x := qr(x[1]): print(x[2]):
x := 4289549:
x := qr(x): print(x[2]):
x := qr(x[1]): print(x[2]):
x := qr(x[1]): print(x[2]):
x := qr(x[1]): print(x[2]):
x := 4975755:
x := qr(x): print(x[2]):
x := qr(x[1]): print(x[2]):
x := qr(x[1]): print(x[2]):
x := qr(x[1]): print(x[2]):
x := 166204:
x := qr(x): print(x[2]):
x := qr(x[1]): print(x[2]):
x := qr(x[1]): print(x[2]):
x := qr(x[1]): print(x[2]):
nombrescryptes := [1, 72, 0, 91, 5, 0,28,14, 5, 76,31, 35, 0, 18, 39,
49];
// décaler de 32
nombrescryptesdecales := map(nombrescryptes,x->x+32);
// convertir la liste de nombres en texte
messagecrypte := numlib::fromAscii(nombrescryptesdecales);
print(%);
Note : copier le message formaté ci-dessus vers un traitement de texte fait apparaître l'espace qui peut apparaître au début et «échappe» la barre oblique inversée (antistlash) en la doublant ou les guillemets