Autor Beitrag
F.Art
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Fr 30.09.05 16:27 
de.wikipedia.org/wik...l%C3%BCsselaustausch

Ich möchte den Diffie-Hellman-Schlüsselaustausch mit meinem Prjekt berechnen lassen.
Siehe Abschnitt: Funktionsweise und Beispiel.

Wie würde das gehen?
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Fr 30.09.05 16:44 
Hi!

Möchtest du nur den Schlüssel K aus den Parametern berechnen, oder alles gleich mit Netzwerkunterstützung, also schließlich 2 Progs??
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Fr 30.09.05 17:13 
Ich will es später so machen das sich die 2 Programme über das netz verbinden und das alles automatisch machen. Aber die manuelle variante soll auch drinne sein.


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
var Primzahl, z: Real;
begin
Primzahl := StrToFloat(PrimzahlEdit.Text);
z := Power(2, Primzahl);
showmessage(IntToStr(FloatToInt(z) mod 13)); 
end;


FloatToInt(z) funktioniert so nicht.

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


OK habs


ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(IntToStr(Round(Power(StrToFloat(PrimzahlEdit.Text), StrToFloat(ZahlEdit.Text))) mod StrToInt(PrimwurzelEdit.Text)));
end;


Allerdings möchte ich nun das die Primzahl und Primwurzel per Zufall generiert wird.
Wie funktioniert das nun?
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Fr 30.09.05 18:18 
random(10) liefert dir eine Zufallszahl: 0 >= x < 10
Allerdings musst du beim starten des progs den Zufallsgenerator initialisieren:
ausblenden Delphi-Quelltext
1:
randomize;					
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Fr 30.09.05 18:38 
Ich habe mal etwas experimentiert und finde das mein Ansatz nicht weiter verwendbar ist.
ICh möchte mit grossen Zahlen arbeiten also die Tools sollen jeweils für sich a und b errechnen. Wobei diese Zahlen groß sein sollen. Die Primzahl, Primwurzen und eine beliebige Zahl sollen alle per zufall generiert werden. Danach tauschen die Parteien a und b aus woraus sie dann K errechnen.
Die beliebige Zahl kann mit Random(x) generiert werden. Aber wie sieht es mit den Anderen aus?


Jetzt suche ich natürlich eine optimale Lösung?
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Fr 30.09.05 18:50 
Tja, da wäre dann nur noch die "nicht ganz saubere" Methode, dass du die Primzahl durch reines herumraten suchst:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function Prim(N: Longint): Boolean;
...

repeat
x := random(1000000);
until Prim(x);


Die Primwurzeln kannst du ja dann ausrechnen, wenn du die Primzahl hast.
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Fr 30.09.05 19:47 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
Function IsPrim(zahl : Integer): boolean;
var
i: integer;
begin
  result := true;
  If zahl = 1 then
  begin
    result := false;
    exit;
  end;
  For i := 2 to (zahl div 2) do
  begin
    If ((zahl mod i) = 0) then
    begin
      result := false;
      exit;
    end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var a: Real;
    b: integer;
begin
a := Power(StrToFloat(PrimzahlEdit.Text), StrToFloat(ZahlEdit.Text));
b := Round(a);
AErgebnis.Text := IntToStr(b mod StrToInt(PrimwurzelEdit.Text));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
end;

procedure TForm1.TimerPrimzahlTimer(Sender: TObject);
begin
ZahlEdit.Text := IntToStr(Random(1000000));
Primzahl := Random(1000000);
if IsPrim(Primzahl)=true then begin
   TimerPrimzahl.Enabled:=false;
   PrimzahlEdit.Text:=IntToStr(Primzahl);
   PrimwurzelEdit.Text:=IntToStr(Random(Primzahl));
   end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
TimerPrimzahl.Enabled:=true;
end;


So habe ich es derzeit aber es kommt fast immer die Fehlermeldung 'Gleitkommaüberlauf'.
Was nun?
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Fr 30.09.05 20:03 
Wo genau tritt denn der Fehler auf?

ehm, in der IsPrim Funktion sollte man nur bis Round(sqrt(zahl)) prüfen,
und warum so umständlich in der Button1Click mit 2 variablen a und b ?? :?
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Fr 30.09.05 20:22 
Der Fehler tritt bei Button klick 1 auf
a := Power(StrToFloat(PrimzahlEdit.Text), StrToFloat(ZahlEdit.Text));

Wie bekomme ich denn sonst a zu integer? FloatToInt geht nicht
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Fr 30.09.05 20:27 
Versuchs mal so:

ausblenden Delphi-Quelltext
1:
b := Round(Power(StrToInt(PrimzahlEdit.Text), StrToInt(ZahlEdit.Text)));					
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Fr 30.09.05 20:37 
immer noch gleitkommafehler
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 30.09.05 20:49 
Ein Blick in DP bringt die Lösung.. Primzahlentest in 0ms für Zahlen bis 2^32. negaH ist der absolute Spezialist für diese Form der Gehirnakrobatik.
www.delphipraxis.net...c63109,0,asc,15.html

_________________
Na denn, dann. Bis dann, denn.
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Fr 30.09.05 21:12 
Also mir ist nichts klar, der fehler kommt aber auch aus einer anderen ecke.
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Fr 30.09.05 21:35 
Hm,
also bei funzt des NICHT:
ausblenden Delphi-Quelltext
1:
b := Round(Power(StrToInt('30'), StrToInt('7')));					

aber des:
ausblenden Delphi-Quelltext
1:
b := Round(Power(StrToInt('3'), StrToInt('7')));					


anscheinend liegt es auch am wertebereich von Integer, sind namlich ziemlich große zahlen!


Zuletzt bearbeitet von Chryzler am Fr 30.09.05 22:09, insgesamt 1-mal bearbeitet
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Fr 30.09.05 21:59 
Also ich weis nicht wie das geht.
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Fr 30.09.05 22:43 
Jetzt habe ich die ganze zeit rum getüfftelt und es geht irgendwie nicht richtig.
das endergebnis ist auch nicht immer das gleiche. hat nicht jemand einen fertigen source der 100%tig funkt?
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Sa 01.10.05 10:39 
Hallo.
Also ich mal sowas zusammengecoded.
Allerdings gehts nur mit sehr kleinen p's
Einloggen, um Attachments anzusehen!
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Sa 01.10.05 12:22 
So hier ist mein derzeitiger Test.
Ich werde mal den anderen Source testen.
Bei mir ist auch das Problem das die Zahlen sehr klein bleiben müssen.
Da sie schnell eine Grösse erreichen die anscheind zu groß für den PC sind.
Nur das Problem ist dann das meistens das Endergebnis zu oft mit den gleichen Zahlen ausfällt.
Einloggen, um Attachments anzusehen!
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Sa 01.10.05 12:28 
user profile iconalzaimar hat folgendes geschrieben:
Ein Blick in DP bringt die Lösung.. Primzahlentest in 0ms für Zahlen bis 2^32. negaH ist der absolute Spezialist für diese Form der Gehirnakrobatik.
www.delphipraxis.net...c63109,0,asc,15.html

Übersehen?

_________________
Na denn, dann. Bis dann, denn.
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Sa 01.10.05 13:25 
Die IsPrimeHRUnit hatte ich schonmal ausprobiert.
Um die Geschwindigkeit mache ich mir keine sorgen, eher im die Fehler die durch was anderem verursacht werden. Die IsPrimeHRUnit habe ich mal wieder eingefügt aber die Fehler bestehen nocht.
Einloggen, um Attachments anzusehen!