ISEN-Brest. Kany. TD: Cryptage RSA
ListeDecodee=IntegerDigits[nombre,ClePublique];
ListeDecodee=Partition[Sow[ListeDecodee,ClePublique],2];
ListeCodee=Map[Codage,ListeDecodee];
Return[ListeEnNombre[ListeCodee,ClePublique]];];
MessageCode=RSA[Code["Message"],n1]
Out[22]= 683863267296776668652927526278887
Decodage
In[23]:= expomodulo[xx ,nn ,mm ]:=Module[{liste,ii,imax,res,puissance},
puissance=Mod[xx,mm]; liste=IntegerDigits[nn,2]; imax=Length[liste];
If[liste[[imax]]==1,res=xx,res=1];
For[ii=imax-1,ii>=1,ii--,
puissance=Mod[puissance^2,mm]; If[liste[[ii]]==1,res=Mod[res*puissance,mm];];];
Return[res];]
Decodage[liste ]:=Module[{nombre,ClePrivee,ClePublique},
nombre=liste[[1]];ClePrivee=liste[[2]][[1]];ClePublique=liste[[2]][[2]];
Return[expomodulo[nombre,ClePrivee,ClePublique]]];
ASR[nombre ,ClePrivee ,ClePublique ]:=Module[{ListeCodee,ListeDecodee,res},
ListeCodee=IntegerDigits[nombre,ClePublique];
ListeCodee=Partition[Sow[ListeCodee,{ClePrivee,ClePublique}],2];
ListeDecodee=Map[Decodage,ListeCodee];
Return[ListeEnNombre[ListeDecodee,ClePublique]];];
ASR[MessageCode,k1,n1]
Out[26]= 6101249171578647385225561440965
1 envoie un message 2
In[27]:= Code["Bonjour, ca va ?"]
ASR[Code["Bonjour, ca va ?"],k1,n1]
MessageEnvoye=RSA[ASR[Code["Bonjour, ca va ?"],k1,n1],n2]
Out[27]= 116641592712282001463149217660028982581610315105012093918877189000477672773
Out[28]= 159071632319608592115103484642891131233449708039690962730108017175548532624434
Out[29]= 351613662903029463412718813642207235213337678647855147225107131666234478270218
2 d´ecode le message de 1
In[30]:= ASR[MessageEnvoye,k2,n2]
MessageRecu=RSA[ASR[MessageEnvoye,k2,n2],n1]
Decode[MessageRecu]
Out[30]= 159071632319608592115103484642891131233449708039690962730108017175548532624434
Out[31]= 116641592712282001463149217660028982581610315105012093918877189000477672773
Out[32]= Bonjour, ca va ?
3 connait n1 et n2 mais pas k2, il ne peut pas d´ecoder. Exemple:
In[33]:= p3=Prime[30008]
q3=Prime[30009]
Mod[p3,3]
3