AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Eine BigInt Klasse + RSA-Beispiel
Thema durchsuchen
Ansicht
Themen-Optionen

Eine BigInt Klasse + RSA-Beispiel

Ein Thema von peanut · begonnen am 25. Jul 2006 · letzter Beitrag vom 6. Feb 2021
Antwort Antwort
Seite 2 von 3     12 3      
peanut
(Gast)

n/a Beiträge
 
#1

Re: Eine BigInt Klasse + RSA-Beispiel

  Alt 27. Jul 2006, 10:26
Zitat von Flocke:
Aber das ist gerade die "nicht so gute" Variante gewesen (sorry Himi).

Was shmia vielleicht hätte etwas hervorheben sollen und was Dax auch schon geschrieben hat: du solltest nie die Methode Free überschreiben sondern immer den Destruktor Destroy, und das mit override - dort gehört dein Aufräumcode hinein.
Ich bin für alle Hinweise dankbar . Ursprünglich waren die Funktionen nicht in einer Klasse, das wurde erst später gemacht - dementsprechend sieht das jetzt auch aus (wie man sieht )...

Die aktualisierte Version ist jetzt online.
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Eine BigInt Klasse + RSA-Beispiel

  Alt 3. Sep 2006, 01:02
Kann jemand diesen Thread loeschen bitte von mir?
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
peanut
(Gast)

n/a Beiträge
 
#3

Re: Eine BigInt Klasse + RSA-Beispiel

  Alt 3. Sep 2006, 12:39
Zitat von Mackhack:
Kann jemand diesen Thread loeschen bitte von mir?
Wieso löschen, gibt es ein Problem?

Gruß peanut.
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#4

Re: Eine BigInt Klasse + RSA-Beispiel

  Alt 3. Sep 2006, 12:40
Ich denke Mackhack hat sich verschrieben, er meinte nicht den Thread löschen sondern nur seinen Post.
  Mit Zitat antworten Zitat
peanut
(Gast)

n/a Beiträge
 
#5

Re: Eine BigInt Klasse + RSA-Beispiel

  Alt 3. Sep 2006, 13:03
Ich hoffe doch Ich werde bei so etwas aber immer hellhörig, da in der Vergangenheit bereits BigInt-Klassen anderer Autoren wegen irgendwelcher Patentansprüche nicht mehr öffentlich als Download angeboten werden durften....
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Eine BigInt Klasse + RSA-Beispiel

  Alt 3. Sep 2006, 18:34
Ja sorry,

meinte meinen Post net den ganzen Thread. Entschuldige fuer den erhoeten Puls den ich dir wohl verpasst habe!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Eine BigInt Klasse + RSA-Beispiel

  Alt 15. Jul 2007, 13:21
hmm... wie kann ich eigendlich zu diesem BigInt eine zahl addieren...?

also sowas irgendwie:

  MyBigInt.Add(548); weil bei der add-methode kann ja nur ein weiterer BigInt übergeben werden...
Dominik
  Mit Zitat antworten Zitat
peanut
(Gast)

n/a Beiträge
 
#8

Re: Eine BigInt Klasse + RSA-Beispiel

  Alt 15. Jul 2007, 14:09
Hallo!

Dies Funktion habe ich damals nicht implementiert, wäre allerdings ganz sinnvoll - muss ich zugeben

Ich schau mal, was ich da machen kann... braucht aber ein paar Stunden/Tage...
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Eine BigInt Klasse + RSA-Beispiel

  Alt 15. Jul 2007, 14:27
Par Sachen sind mir aufgefallen (habe ja selber so'ne Library programmiert http://www.michael-puff.de/Developer...agen_Reddmann/

1.) TBigInt.Trim; sollte umbenannt werden in TBIgInt.Normalize;
2.) Ein TBigInt der 0 ist wird bei dir mit FDigit[0] := 0; initialisiert. Das führt dazu das Length(FDigit) = 1 ist. Du solltest die 0 intern mit FDigit = nil = Lenght(FDigit) = 0 definieren. Das vereinfacht alle nachfolgenden Operationen.
TBigInt.IsZero := FDigits = nil;
3.) Es ist clever FDigits in Schritten von zb. 16 TDigits zu erhöhen. Parallel dazu ein neues Feld FCount das die Anzahl der real benutzten TDIgits in FDigits speichert. So verhindert du die vielen Reallokationen des dynam. Arrays FDigits. Das bringt ne ganze Menge mehr Performance
4.) Deine Konvertierungsfunktionen eines TBigInt von/nach String zu einer beliebigen Basis sind ineffizient Das geht bei weitem schneller, bzw. dein Algorithmus ist ineffizient.
5.) Die ganzen Funktionen wie .IsGreater, .IsEqual usw. sind überflüssig. Das ist "Programmiererdenken" und nicht Denken eines Mathematikers. In meiner Lib gibts nur eine Funktion .NCmp(A, B): Integer; vergleiche A mit B und gebe -1 zurück wenn A < B, +1 wenn A > B und 0 wenn A = B.
6.) Zur Überprüfung einer Zahl auf Prime gibt es bessere Algos. als Rabin Miller. Zb. Test nach Selfridge-Wagstaff-Pomerance.
7.) Add() und Sub() sind die gleiche Operation nur mit inversen Vorzeichen, warum zwei getrennte Funktionen
8.) Warum subtrahisert du im 2'Complement, die vorherige Konvertierung macht deine Sub/Add unnötig langsam.
9.) die Funktionen für Add()/Sub()/Mul() etc. sollten in Assembler codiert werden. Besonders weil du als Basis 2^32 benutzt. Das hat primär nichts mit Peformance zu tuen, sondern als erstes mit der Fähigkeit in Assembler die speziellen Features der CPU besser benutzen zu können. Dh. in Assembler haben wir Möglichkeiten die Opcode für ADD/SUB/MUL/DIV chained zu benutzen. Deine jetzge Konvertierung und Rechnung mit Int64 macht deine Funktionen mindestens 3 mal so langsame wie sie sei könnten. Int64 ist in der Delphi RTL absolut miserable implementiert, soll heisen ineffizient. Fast alle meiner eigenen Int64 Routinen sind 2-5 mal schneller als die von Borland.
10.) deine Division geht weit besser. Schau mal bei D.Knuth rein, Absatz "Arithmetics".
11.) die Barret Reduction ist im Vergleich zum Montgomery Trick ineffizienter

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Eine BigInt Klasse + RSA-Beispiel

  Alt 15. Jul 2007, 14:34
Delphi-Quellcode:

function DoAddC(Digits: Pointer; Value: Cardinal; Count: Integer): Cardinal;
asm
         
         LEA EAX,[EAX + ECX]
         NEG ECX
         ADD [EAX + ECX],EDX
         MOV EDX, 0
         JMP @@2
@@1: ADC [EAX + ECX],EDX
@@2: JNC @@3
         INC ECX
         JNZ @@1
@@3: ADC EDX,EDX
         MOV EAX,EDX
end;

procedure TBigInt.Add(Value: Cardinal);
var
  Carry: Cardinal;
begin
  Carry := DoAddC(@FDigits, Value, Length(FDigits));
  if Carry <> 0 then
  begin
    SetLength(FDigits, Length(FDigits) +1);
    FDigits[High(FDigits)] := Carry;
  end;
end;
Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 10:26 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