dh-Materialien
Maple   
Anwendungen

Public-Key-Verschlüsselung

> restart;

Die zu verschlüsselnde Nachricht, die Alice an Bob schicken möchte:

> Nachricht:= "I love you";

Umwandeln der Nachricht in eine Zahl m (message ):

> c:= convert(Nachricht, bytes);
  z:= 0:
for i from 1 to nops(c) do z:= 256*z + c[i]; od:
m:= z;


Berechnen der Schlüssel von Alice:

> p:= nextprime(43672342156995):
q:= nextprime(271141486213133):
public1[A]:= p*q; # öffentlich
h:= (p-1)*(q-1) + 1:
ifactor(h);
public2[A]:= op(1, op(3, ifactor (h))); # öffentlich
secret[A]:= h/public2[A]; # geheim




Berechnen der Schlüssel von Bob:

> p:= nextprime(7858462424243636):
q:= nextprime(1237432424242):
public1[B]:= p*q; # öffentlich
h:= (p-1)*(q-1) + 1:
ifactor (h);
public2[B]:= op(1, op(3, ifactor (h))); # öffentlich
secret[B]:= h/public2[B]; # geheim



public2[B] := 139
secret[B] := 69959109413285411384914015

Signieren von m durch Alice:

> m_signiert:= m &^ secret[A] mod public1[A];

Versiegeln von m_signiert durch Alice mit Hilfe des öffentlichen Schlüssels von Bob:

> m_signiert_versiegelt:= m_signiert &^public2[B] mod public1[B];

Entschlüsseln dieser Zahl durch Bob:

> m_sign:= m_signiert_versiegelt &^ secret[B] mod public1[B];

Entfernen der Signatur durch Bob:

> m_orig:= m_sign &^ public2[A] mod public1[A];

Umwandeln dieser Zahl in die ursprüngliche Nachricht:

> z:= m_orig:
i:= 0:
while z > 0 do
  i:= i + 1:
  cod[i]:= z mod 256:
  z:= (z - cod[i])/256: 
end:
cod:= [seq(cod[i-j+1], j=1..i)];
convert(cod, bytes);