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
 
Basti_sz

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

RSA Verschlüsselung - Access Violation

  Alt 25. Jan 2009, 12: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
 


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 13:41 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