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

Iz MaFiRaWiki

(Razlika med različicami)
Različica od 19:21, 2 junij 2007
Korezr (Pogovor | prispevki)
Delovanje
← Prejšnja različica
Različica od 19:23, 2 junij 2007
Korezr (Pogovor | prispevki)
Implementacija
Naslednja različica →
Vrstica 5: Vrstica 5:
<pre> <pre>
In[1]:= PretvoriVStevilo[s_String] := Fold[256#1 + #2 &, 0, ToCharacterCode[s]] In[1]:= PretvoriVStevilo[s_String] := Fold[256#1 + #2 &, 0, ToCharacterCode[s]]
-In[2]:= PretvoriVStevilo["Janez Novak"]+In[2]:= PretvoriVStevilo["Racunalnistvo"]
-Out[2]:= 89920616654361488803651947+Out[2]:= 6526849610331528453800095676015
</pre> </pre>
'''Funkcija PretvoriVBesedilo''' '''Funkcija PretvoriVBesedilo'''
Vrstica 13: Vrstica 13:
NarediTabelo[n_Integer] := Append[NarediTabelo[Quotient[n, 256]], Mod[n, 256]] NarediTabelo[n_Integer] := Append[NarediTabelo[Quotient[n, 256]], Mod[n, 256]]
PretvoriVBesedilo[n_Integer] := StringJoin[Map[FromCharacterCode, NarediTabelo[n]]] PretvoriVBesedilo[n_Integer] := StringJoin[Map[FromCharacterCode, NarediTabelo[n]]]
-In[6]:= PretvoriVBesedilo[89920616654361488803651947]+In[6]:= PretvoriVBesedilo[6526849610331528453800095676015]
-Out[6]:= Janez Novak+Out[6]:= Racunalnistvo
</pre> </pre>
'''Funkcija VelikoPrastevilo''' '''Funkcija VelikoPrastevilo'''
Vrstica 24: Vrstica 24:
VelikoPrastevilo[n_Integer] := VelikoPrastevilo[n_Integer] :=
NajblizjePrastevilo[Random[Integer, {10^(n - 1)), 10^(n)}]] NajblizjePrastevilo[Random[Integer, {10^(n - 1)), 10^(n)}]]
-In[9]:= VelikoPrastevilo[10]+In[9]:= VelikoPrastevilo[20]
-Out[9]:= 7404799921+Out[9]:= 61749609209745709709
</pre> </pre>
'''Funkciji Kodiraj in Dekodiraj''' '''Funkciji Kodiraj in Dekodiraj'''

Različica od 19:23, 2 junij 2007

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

Ključa

In[12]:=  p = 1951851851;
          q = 5651564047;
          n = p*q;
In[15]:=  P[n_Integer] := EulerPhi[n]
In[16]:=  P[n]
Out[16]:= 11031015738578585100
In[17]:=  e = VelikoPrastevilo[5];
          While[GCD[e, P[n]] > 1, e = VelikoPrastevilo[5]]
          e
Out[19]:= 92849
In[20]:=  d = Mod[ExtendedGCD[e, P[n]][[2, 1]], P[n]]
Out[20]:= 2196128401249611149

Kodiranje in dekodiranje

In[21]:=  Kodiraj[89920616654361488803651947]
Out[21]:= 5690355136728885602
Osebna orodja