Rešitev: Algoritem za zakrivanje z javnim ključem (Mathematica)

Iz MaFiRaWiki

(Razlika med različicami)
Različica od 19:23, 2 junij 2007
Korezr (Pogovor | prispevki)
Implementacija
← Prejšnja različica
Trenutna različica
Korezr (Pogovor | prispevki)
Delovanje
Vrstica 33: Vrstica 33:
</pre> </pre>
-== Delovanje ==+== Delovanje RSA ==
'''Ključa''' '''Ključa'''
<pre> <pre>
-In[12]:= p = 1951851851;+In[12]:= p = 90036595358370388667;
- q = 5651564047;+ q = 61749609209745709709;
n = p*q; n = p*q;
In[15]:= P[n_Integer] := EulerPhi[n] In[15]:= P[n_Integer] := EulerPhi[n]
In[16]:= P[n] In[16]:= P[n]
-Out[16]:= 11031015738578585100+Out[16]:= 5559724577955375970436947363081969369528
-In[17]:= e = VelikoPrastevilo[5];+In[17]:= e = VelikoPrastevilo[20];
While[GCD[e, P[n]] > 1, e = VelikoPrastevilo[5]] While[GCD[e, P[n]] > 1, e = VelikoPrastevilo[5]]
e e
-Out[19]:= 92849+Out[19]:= 85602866491793244949
In[20]:= d = Mod[ExtendedGCD[e, P[n]][[2, 1]], P[n]] In[20]:= d = Mod[ExtendedGCD[e, P[n]][[2, 1]], P[n]]
-Out[20]:= 2196128401249611149+Out[20]:= 3667426147686508319182055875332561891509
</pre> </pre>
'''Kodiranje in dekodiranje''' '''Kodiranje in dekodiranje'''
<pre> <pre>
-In[21]:= Kodiraj[89920616654361488803651947]+In[21]:= PretvoriVStevilo["Racunalnistvo"]
-Out[21]:= 5690355136728885602+Out[21]:= 6526849610331528453800095676015
 +In[22]:= Kodiraj[6526849610331528453800095676015]
 +Out[22]:= 1233587205076776545495912318845865502286
 +In[23]:= Dekodiraj[1233587205076776545495912318845865502286]
 +Out[23]:= 6526849610331528453800095676015
 +In[24]:= PretvoriVBesedilo[6526849610331528453800095676015]
 +Out[24]:= Racunalnistvo
</pre> </pre>

Trenutna različica

Implementacija

Funkcija PretvoriVStevilo

In[1]:=   PretvoriVStevilo[s_String] := Fold[256#1 + #2 &, 0, ToCharacterCode[s]]
In[2]:=   PretvoriVStevilo["Racunalnistvo"]
Out[2]:=  6526849610331528453800095676015

Funkcija PretvoriVBesedilo

In[3]:=   NarediTabelo[0] := {};
          NarediTabelo[n_Integer] := Append[NarediTabelo[Quotient[n, 256]], Mod[n, 256]]
          PretvoriVBesedilo[n_Integer] := StringJoin[Map[FromCharacterCode, NarediTabelo[n]]]
In[6]:=   PretvoriVBesedilo[6526849610331528453800095676015]
Out[6]:=  Racunalnistvo

Funkcija VelikoPrastevilo

In[7]:=   NajblizjePrastevilo[n_Integer] := Module[{m},
          If[EvenQ[n], m = n + 1, m = n];
          While[! PrimeQ[m], m = m + 2];
          m]
          VelikoPrastevilo[n_Integer] := 
          NajblizjePrastevilo[Random[Integer, {10^(n - 1)), 10^(n)}]]
In[9]:=   VelikoPrastevilo[20]
Out[9]:=  61749609209745709709

Funkciji Kodiraj in Dekodiraj

In[10]:=  Kodiraj[x_Integer] := PowerMod[x, e, n]
In[11]:=  Dekodiraj[y_Integer] := PowerMod[y, d, n]

Delovanje RSA

Ključa

In[12]:=  p = 90036595358370388667;
          q = 61749609209745709709;
          n = p*q;
In[15]:=  P[n_Integer] := EulerPhi[n]
In[16]:=  P[n]
Out[16]:= 5559724577955375970436947363081969369528
In[17]:=  e = VelikoPrastevilo[20];
          While[GCD[e, P[n]] > 1, e = VelikoPrastevilo[5]]
          e
Out[19]:= 85602866491793244949
In[20]:=  d = Mod[ExtendedGCD[e, P[n]][[2, 1]], P[n]]
Out[20]:= 3667426147686508319182055875332561891509

Kodiranje in dekodiranje

In[21]:=  PretvoriVStevilo["Racunalnistvo"]
Out[21]:= 6526849610331528453800095676015
In[22]:=  Kodiraj[6526849610331528453800095676015]
Out[22]:= 1233587205076776545495912318845865502286
In[23]:=  Dekodiraj[1233587205076776545495912318845865502286]
Out[23]:= 6526849610331528453800095676015
In[24]:=  PretvoriVBesedilo[6526849610331528453800095676015]
Out[24]:= Racunalnistvo
Osebna orodja