AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

RSA-Verschlüsselung

Ein Thema von taker875 · begonnen am 12. Apr 2009 · letzter Beitrag vom 20. Apr 2009
Antwort Antwort
taker875

Registriert seit: 2. Okt 2008
25 Beiträge
 
#1

RSA-Verschlüsselung

  Alt 12. Apr 2009, 16:41
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:
k := Round(Power(ORD(s[i]),e)) mod N; e=11 und n=p*q (p=3, q=7)

was mache ich nun falsch?^^ wenn jemand das ganze programm brauch einfach melden.

vielen dank und noch schöne restliche ostern
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: RSA-Verschlüsselung

  Alt 12. Apr 2009, 18:19
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
taker875

Registriert seit: 2. Okt 2008
25 Beiträge
 
#3

Re: RSA-Verschlüsselung

  Alt 12. Apr 2009, 19:14
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:
TheAn00bis hat folgendes geschrieben:
Danke und gibt es auch noch eine Möglichkeit mit Double oder Extended mod (modulo) zu verwenden? Muss ich mir die Funktion jetzt selber schreiben?

Modulo gibt es (ebenso wie den div-Operator) nur für ganzzahlige Typen (Byte, shortInt, LongInt, Cardinal,...). Modulo für Real-Typen wäre (wenn es sowas gäbe) aber nicht sinnvoll, da diese die Zahlen anders speichern als beispielsweise Integer. Bei Real-Typen ist die Genauigkeit nämlich begrenzt. Wenn ein Real-Typ z.B. auf 6 Stellen genau arbeitet, dann werden solche Zahlen wie 123.456.789.012 nur als 123.456.000.000 gespeichert. Die Zahl 123.456.789.999 würde ebenfalls als 123.456.000.000 gespeichert, obwohl es eine andere Zahl ist, da die Genauigkeit des Real-Typs nicht mehr Stellen hergibt. Das hätte zur Folge, dass beide Zahlen trotz ihrer Ungleichheit das selbe Ergebnis liefern, wenn man Modulo auf sie anwendet. Und das ist ja wohl nicht erwünscht.
Also gibt es nur zwei Möglichkeiten: entweder du bleibst mit den Potenzen im Bereich von Int64, oder du nimmst Double (bzw. Extended) für größere Zahlen und musst dich dann damit zufrieden geben, dass es in diesem Bereich kein Modulo mehr gibt.
Die dritte und aufwendigste Methode wäre, sich einen eigenen Ganzzahl-Datentyp zu basteln. Für den müsste man dann aber auch alle Rechenoperationen neu programmieren.

MfG
Binärbaum
also nicht wirklich ne eindeutige lösung. wie kann ich denn nun das ganze umsetzen für eine rsa verschlüsselung?

bin nicht der delphi experte^^

aber vielen dank
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: RSA-Verschlüsselung

  Alt 12. Apr 2009, 20:37
.. oder es vielleicht mal hiermit probieren.

Delphi-Quellcode:
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;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
taker875

Registriert seit: 2. Okt 2008
25 Beiträge
 
#5

Re: RSA-Verschlüsselung

  Alt 20. Apr 2009, 14:10
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:
procedure TForm2.E_qChange(Sender: TObject);
begin
E_e.text :='';
E_n.text :='';
E_n0.text :='';
E_d.text :='';
end;
also bei diesem feld, dass er bei eingabe den wert sofort in die variable "Unit1.q" schreibt.

hoffe ihr versteht meine frage. danke
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz