AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein RSA Verschlüsselung - Access Violation
Thema durchsuchen
Ansicht
Themen-Optionen

RSA Verschlüsselung - Access Violation

Ein Thema von Basti_sz · begonnen am 25. Jan 2009 · letzter Beitrag vom 25. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Basti_sz

Registriert seit: 25. Jan 2009
7 Beiträge
 
#1

RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 13:55
Hallo,

ich bin gerade dabei eine RSA-Verschlüsselung und -Entschlüsselung zu programmieren. Das wichtigste dabei ist das Finden von Primzahlen und die Primfaktorzerlegung eines Produkts zweier Primzahlen.

Es kann sein, dass der Code ziemlich umständig geschrieben sit. Er funktioniert jedoch für n bis ungefähr 900.000 (vielleicht sogar ein bisschen mehr). Wenn ich dann eine größere Zahl eingebe, was immernoch eine INT64 Zahl sein müsste kommt di Fehlermeldung "ACCESS VIOLATION ON ADDRESS ...".
Manchmal passert auch folgendes: Ich gebe eine Zahl für n ein und er berechnet sie. Beim nächsten mal gebe ich wieder die gleiche Zahl für n ein und die Fehlermeldung erscheint.

CODE: Das Programm beginnt mit der Prozedur primfinden.

Delphi-Quellcode:
 VAR
ergebnis: array[0..1] of int64;
temp : array of int64;
prims : array of int64;
timer : cardinal;


implementation

uses index;

function potenzieren(basis:Integer;exponent:Int64):Int64;
VAR i,zahl:Int64;
Begin
 i:=0;
 zahl:=1;
 WHILE i<exponent DO Begin
                      inc(i);
                      zahl:=zahl*basis
                     End;
 result:=zahl;
End;


procedure primfinden(n :int64);
Var grenze,i,k,z,count : int64;
Begin

 setlength(temp,n);
 i:=0;
 While i<(n-1) Do Begin temp[i]:=i+2; inc(i); End;

 {grenze:=wurzel(n);} {setzt die größte Zahl, die man quadrieren kann, ohne die Grenze n zu überschreiten}

 i:=2;
 z:=0;

 While i<n Do Begin {Das sind die Zahlen, die man multipliziert um nichtPrimzahlen zu finden}

                      k:=i; {der Koeffizient, der für jedes i von neuem von 1 größer wird}
                      Repeat Begin

                               z:=i*k;

                               IF ((i=k) AND (z>n))
                               THEN i:=n;

                               temp[z-2]:=0;

                               

                               inc(k);
                              End;
                      Until z>n;
                      inc(i);

                     End;
 i:=0;
 count:=0;
 WHILE i<(n-1) DO BEGIN IF temp[i]<>0 THEN inc(count); inc(i) End;

 setlength(prims,count);
 k:=0;
 i:=0;
 Form1.ListBox1.clear;
 WHILE i<(n-1) Do Begin
                IF temp[i]<>0
                THEN Begin
                      prims[k]:=temp[i];
                      index.Form1.list(inttostr(prims[k]),inttostr(k));
                      inc(k);
                     End;
                inc(i);
               End;

End;

procedure primfaktorzerlegen(n : int64);
Var i: int64;
Begin
 i:=0;
 While i<n DO Begin
               IF n mod prims[i] =0
               THEN Begin
                
                     ergebnis[0]:=prims[i];
                     ergebnis[1]:=trunc(n/ergebnis[0]);
                     Form1.Edit3.Text:='Zeit: '+IntToStr(gettickcount - timer);
                     i:=n;
                    End;
                inc(i);
              End;
End;
Ich hoffe der Fehler ist offensichtlich für jemanden
Danke schon mal im Voraus für eure Hilfe.

Ich hoffe der Code reicht aus und ist einigermaßen Verständlich.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 13:57
In welcher Zeile tritt der Fehler denn auf? Würde die Suche etwas eingrenzen...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 14:00
Möglichweise ist aber In64 auch zu klein für ein Zwischenergebnis
Markus Kinzler
  Mit Zitat antworten Zitat
Basti_sz

Registriert seit: 25. Jan 2009
7 Beiträge
 
#4

Re: RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 14:03
Sorry, hab vergessen die Zeile zu nennen.

Er tritt ziemlich in der Mitte auf: In der While-Schleife: temp[z-2]:=0;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 14:05
Welchen Wert hat z zu diesem Zeitpunkt?
Markus Kinzler
  Mit Zitat antworten Zitat
Basti_sz

Registriert seit: 25. Jan 2009
7 Beiträge
 
#6

Re: RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 14:14
Das weiß ich leider nicht. Es wird nirgends angezeigt. Gibt es denn eine gute Methode bei Delphi das herauszufinden welche Werte die Variablen haben?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 14:17
Ich hoffe, ich erzähl dir nichts neues, wenn ich ich vom Delphi-Debugger rede. Schau dir den Ablauf doch im Debugger an und überwache z.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#8

Re: RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 14:18
Zitat von Basti_sz:
Das weiß ich leider nicht. Es wird nirgends angezeigt. Gibt es denn eine gute Methode bei Delphi das herauszufinden welche Werte die Variablen haben?
´
Du kannst einen Breakpoint setzen (links neben der Zeile in den Rand klicken, dann erscheint da ein roter Boppel), dann wird das Programm, wenn es diese Zeile ausführt, angehalten, und du kannst dir im Debugger die Werte der Variablen betrachten (einfach mit der Maus draufzeigen).
  Mit Zitat antworten Zitat
Basti_sz

Registriert seit: 25. Jan 2009
7 Beiträge
 
#9

Re: RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 15:02
Ich habe einen Fehler schon mal gefunden:

Vor temp[z-2]:=0 muss noch die Bedingung z<=n hinzugefügt werden. Ansonsten will eine Stelle des Arrays ändern, die es gar nicht gibt.
Habe schon die Zahl 7.000.000 zerlegt. Hat zwar für meinen Geschmack zu lange gedauert aber es hat geklappt.

Als ich dann 2^32 (also: 4.294.967.296) eingegeben habe kam ein neuer Fehler.

Undzwar gleich bei der ersten While-Schleife in der Procedure primfinden:

While i<(n-1) Do Begin temp[i]:=i+2; inc(i); End;

Es ist wieder die gleiche Fehlermeldung EAccessViolation
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 15:05
Und der Array hat zu diesem Zeitpunkt i + 1 Einträge?
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:56 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