| Autor |
Beitrag |
F.Art
      
Beiträge: 434
|
Verfasst: 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
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: 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 
      
Beiträge: 434
|
Verfasst: 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.
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 raziel: Delphi-Tags hinzugefügt.
OK habs
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
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: 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:
Delphi-Quelltext
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: 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
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: 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:
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 
      
Beiträge: 434
|
Verfasst: Fr 30.09.05 19:47
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
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: 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 
      
Beiträge: 434
|
Verfasst: 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
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Fr 30.09.05 20:27
Versuchs mal so:
Delphi-Quelltext 1:
| b := Round(Power(StrToInt(PrimzahlEdit.Text), StrToInt(ZahlEdit.Text))); |
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Fr 30.09.05 20:37
immer noch gleitkommafehler
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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 
      
Beiträge: 434
|
Verfasst: Fr 30.09.05 21:12
Also mir ist nichts klar, der fehler kommt aber auch aus einer anderen ecke.
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Fr 30.09.05 21:35
Hm,
also bei funzt des NICHT: Delphi-Quelltext 1:
| b := Round(Power(StrToInt('30'), StrToInt('7'))); |
aber des: 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 
      
Beiträge: 434
|
Verfasst: Fr 30.09.05 21:59
Also ich weis nicht wie das geht.
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: 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
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: 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 
      
Beiträge: 434
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Sa 01.10.05 12:28
_________________ Na denn, dann. Bis dann, denn.
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: 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!
|
|