![]() |
RSA-Verschlüsselung
hallo,
hab da nun ein problem bei dem ich nicht so richtig weiter komme. es geht um ein programm für die rsa verschlüsselung. Fehler : Im Projekt1.exe ist eine Exception der Klasse EInvalidOp aufgetreten. Meldung 'Ungültige Gleitkommaoperation'. Prozess wurde angehalten. ... habe den fehler nun lokalisiert mit dem durchgehen des programms per F7. der fehler ist hier:
Delphi-Quellcode:
e=11 und n=p*q (p=3, q=7)
k := Round(Power(ORD(s[i]),e)) mod N;
was mache ich nun falsch?^^ wenn jemand das ganze programm brauch einfach melden. vielen dank und noch schöne restliche ostern |
Re: RSA-Verschlüsselung
EDIT: Erste, falsche Vermutung gelöscht.
Die entstehende Gleitkommazahl ist einfach zu groß, um sie dann zu nem Integer zu runden. Auch Int64 ist nicht groß genug. Es gibt spezielle Algorithmen, um diese Potenzen in Restwertklassen effizient durchzuführen. Such doch einfach mal nach RSA hier im Forum, da findest du Dutzende von Threads zu dem Thema, in dem genau das gleiche Problem auftritt. |
Re: RSA-Verschlüsselung
habe ein thema gefunden in dem um das gleiche ging. aber da ist auch keine wirkliche lösung raus gekommen. da gab es als lösung nur :
Zitat:
bin nicht der delphi experte^^ aber vielen dank |
Re: RSA-Verschlüsselung
.. oder es vielleicht mal hiermit probieren.
Delphi-Quellcode:
Grüße
function expmod(b,x,m : integer) : integer;
var quad,halb,erg : Integer; { Berechnet die diskrete Exponentialfunktion b hoch x modulo m unter ausschließlicher Verwendung der Operationen Quadrieren und Multiplizieren. Der Rest wird nach jeder Operation bestimmt, um große Zwischenergebnisse zu vermeiden mod bezeichnet die Modulo-Operation div bezeichnet die ganzzahlige Division } begin Quad := b; Halb := x; Erg := 1; while Halb > 0 do begin if Halb mod 2 > 0 then Erg := (Erg * Quad) mod m; Quad := (Quad * Quad) mod m; Halb := Halb div 2; end; result := Erg end; Klaus |
Re: RSA-Verschlüsselung
erstmal vielen dank für die hilfe hat so wirklich gut gefunzt. bin nun schon so gut wie fertig habe da aber noch eine kleine sache.
wenn ich ein edit feld habe, in welches ich etwas eingeben kann. dann möchte, dass er ohne einen klick auf einen button sofort das in dem editfeld in die variable schreibt während ich es dort rein schreibe.
Delphi-Quellcode:
also bei diesem feld, dass er bei eingabe den wert sofort in die variable "Unit1.q" schreibt.
procedure TForm2.E_qChange(Sender: TObject);
begin E_e.text :=''; E_n.text :=''; E_n0.text :=''; E_d.text :=''; end; hoffe ihr versteht meine frage. danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz