Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Streams usw. (https://www.delphipraxis.net/114342-unnamed-projekt-bigint-md5-ripemd320-sha-streams-usw.html)

himitsu 26. Mai 2008 13:17

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream
 
Liste der Anhänge anzeigen (Anzahl: 1)
@gammatester: ich könnte es notfalls auch als ZIP hochladen, aber 7zip ist doch inzwischen kein ungewöhnliches Format mehr?

Wei Dai's Crypto++ Seite schau ich mir gleich mal an.

und was den Link betrifft: hatte einfach in Google gesucht und das war einfach eine der ersten Seiten, wo ich genug und hübsche Prüfmuster fand. :angel2:

deine weitere Anregung betreffend, hatte damals eigentlich nicht vor noch was an dieser Implementation zu verändern (ist zwar nicht die Schnellste, aber mir gefiehl sie so ganz gut) und sie lief auch eigentlich.
nja, direkt in die Projektdateien mach ich die Prüffunktionen wohl nicht rein, aber ich werd' mein kleines Prüfprogrämmhen weiter ausbauen (vielleicht mal mit 'ner übersichtlichen GUI).
Im Endefekt wird ja kaum mal was geändert, wenn es einmal läuft ... wird also vermutlich nicht häufig genutzt.

Zitat:

Zitat von sx2008
Warum sind denn so viele Deklarationen aus Unit Windows enthalten?
Schließlich vergrössert die Unit Windows eine Anwendung nicht (und wenn doch, dann nur unwesentlich).

Da ich Erstens alles zusammen haben wollte,

Zweitens einige Änderungen gegenüber den Delphi-Deklarationen drin hab ... es ist mehr am MSDN ausgerichtet und außerdem hat Delphi einige Fehler drin (vorallem beim Unicode)

und Drittens hab ich (versuch es zumindestens) die aktuellsten Definitionen zu nutzen.
in Delphi ist noch nichtmal alles vom XP drin ... ich bin da nur auf'm Stand des WinSDK v6.1 (Windows Vista / Windows Server 2008)

oder was glaubst du warum noch andere WinAPIs für Delphi anbieten?
(z.B. die ganzen JEDI-APIs ... ich sortiere es nur etwas anderes und passe es noch etwas ans Projekt an)

Aber vorallem hab ich versucht alles loszuwerden, was 'nen Initialization-/Finalizationabschnitt enthält ... ich weiß, Windows.pas ist noch recht harmlos, aber wenn man einmal nicht konsequent ist ......... :angel:




so, das kleine Testprojekt läuft erstmal.
jetzt muß ich nur noch die Fehler in ThxMD5 und ThxRMD320 finden :?

tja und dann sollte ich mir noch ein paar Prüfmuster für BigInt und Co. einfallen lassen :stupid:

himitsu 27. Mai 2008 11:43

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream
 
Liste der Anhänge anzeigen (Anzahl: 1)
Sooooo, der Fehler in den Hashfunktionen hat sich angefunden ... mußte mal ein Backup zurückspielen und da fehlten noch die damals aktuellen Änderungen (die Adressen zu den neuen Varialenpositionen waren nicht mehr angepaßt)

tja und beim Filehash hatte sich ein witziger Fehler eingeschlichen ... "Final" wurde dopelt ausgeführt :shock:


neue Dateien und kleine Ergänzung ( [neu] ) siehe ersten Post

und hier im Anhang nicht wundern ... die 5 Fehlermeldungen sind korrekt, schließlich fehlt die Testdatei für jeweils den ersten Filehashtest. (oben im Pojekt ist aber alles drin)

himitsu 31. Mai 2008 12:32

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream
 
Liste der Anhänge anzeigen (Anzahl: 2)
Aufgrund des Themas
Exponentieren und dann Modulo: große Zahlen - speziell die Beiträge #30 bis #33
hab ich mal die BigInt-"Klasse" extrahiert.

Systemvoraussetzung ebenfalls mindestens Delphi/BDS 2006 incl. der nötigen Updates.

Wertebereich:
von -6.703.903.964.971.298.549.787.012.499.102.923.063. 739.682.910.296.196.688.861.780.
721.860.882.015.036.773.488.400.937.149.083.451.71 3.845.015.929.093.243.025.426.876.941.405.973.284. 973.216.824.503.042.048
bis +6.703.903.964.971.298.549.787.012.499.102.923.063 .739.682.910.296.196.688.861.780.
721.860.882.015.036.773.488.400.937.149.083.451.71 3.845.015.929.093.243.025.426.876.941.405.973.284. 973.216.824.503.042.047

+/- 6.703e153
-2^511 .. 2^511 - 1

512 Bit im Zweierkomplement = 152(153) Dezimalstellen
Int64 = 18(19) Dezimalstellen


die Klasse ist fast identisch mit dem Original
- Funktion .OneBit fehlt (braucht aber vermutlich eh keiner)
- TnStream durch TStream ersetzt
- interne Funktionen auf Private gesetzt
- keine ASM-Optimierungen (gibt aber eh kaum welche)
- und es wird natürlich nur diese eine Unit benötigt


Vieles wie beim "normalen" Integer auch nutzbar:

< <= = <> >= >
+ - div mod
and or xor not shl shr
Inc Dec

und als Funktionen in der Klasse und einiges nochmals als Einzelfunktion in der Unit (siehe nach der Klassendefinition) unter Anderem dieses:
DivMod Power LdExp LtExp LxExp ExpMod Log2 Log10 LogN Radic Sqr Sqrt Fibonacci RoundTo RoL RoR



da dieses einen "normalen" Record darstellt, ist auch keine Initialisierung/Finalisierung nötig, wie z.B. bei Objekten.
und man kann diesen Record auch wie einen verwenden ... z.B. Speichern und Laden:
Delphi-Quellcode:
Var BI: TBigInt;
  F: File...;
  S: TStream;
  P: Pointer;

BlockWrite(f, BI, SizeOf(BI));
S.Write(BI, SizeOf(BI));
MoveMemory(P, @BI, SizeOf(BI));


ich hoff mal es läuft alles soweit.
ansonsten wird es hiervon nicht all zu oft ein Update geben können.
(ist halt etwas Aufwand jede Änderung im großen Projekt auch gleich hier einzubauen)

[edit=Daniel G]Wertebereich zum Vermeiden des horizontalen Scrollens mal umgebrochen. Tut ja nicht not, sowas...[/edit]

vsilverlord 31. Mai 2008 17:24

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream
 
Gibt es eine Möglichkeit, die Unit auch unter Delphi 7 enterprise zu nutzen? :|

himitsu 31. Mai 2008 17:58

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream
 
so wie sie jetzt ist, leider nicht (mein altes D7 fühlt sich auch schon etwas vernachlässigt :( )

Es wird halt von erst in Delphi 2006 eingeführten Compilerfeatures gebrauch gemacht.


ich könnte höchstens die Grundfunktionalität in externe Funktionen/Prozeduren umwandeln, dann könnte der Integer weiterhin ein Record bleiben,
nur läßt sich dieser record dann nicht mehr, wie ein "normaler" Integer, direkt in Formeln verwenden (also nur noch per Prozeduren zu berechnen)

oder als Objekt, aber dann wären wieder die schönen Recordeigenschaften weg
und ebenfalls wäre dieses nicht mehr direkt in Formeln zu verwenden.


vielleicht werd' ich den Nachfolger "TScaleInt" mal in eine alternative Klasse umwandeln,
dann ließe diese sich (zwar etwas eingeschränkt) auch in älteren Delphiversionen einsetzen.


@vsilverlord: du kannst dir aber auch ganz einfach mal Turbo Delphi (aka "abgespecktes Delphi 2006") ansehn ... dieses kennt auch die neuen Features :angel:



PS: TScaleInt und TBigFloat sind noch nicht fertig
TScaleInt = scalierbarer Integer
- mit allen eigenschaften eines Integers (also auch mit denen des TBigInt)
- dynamische Speicherverwaltung ... größe wächst mit dem Inhalt (wenn es sein muß, bis der RAM platzt)
(maximalgrößen wählbar)
- alle Dezimalstellen sind signifikant
- scalliert wird auf binärebene ... also im Dualsystem (es gibt aber Funktionen um die eingestellten Dualstellen in Dezimalstellen umzurechnen, oder zurück)
- es entspricht also in etwa dem Typ Currency


TBigFloat stellt einen vergrößerten Single/Double/Extended dar und hat demnach auch deren Eigenschaften

vsilverlord 31. Mai 2008 19:18

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream
 
ok danke für die Antwort. Eigentlich möchte ich mein Delphi 7 behalten, aber ich hab jetzt schon so lange an dem Projekt gearbeitet, dass es nicht daran scheitern soll, nur weil ich zu faul bin mir ein anderes Delphi zu holen. Vielleicht lade ich es nur für dieses eine Projekt runter :?
:pale:

himitsu 2. Jun 2008 12:31

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream
 
Zum Glück ist ja TurboDelphi nicht sooo teuer :stupid:


und die Sache mit TScaleInt kann noch etwas dauern ... häng noch etwas an der Recordvariante fest (und erst wenn es ferig ist, dann leite ich frühestens 'ne Klasse davon ab)

himitsu 22. Jan 2009 11:57

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream
 
hatte zwar noch keine Zeit BigInt und Co. fertigzustellen,

aber die Hashfunktionen würden etwas überarbeitet
siehe Beitrag #16 in CRC32 für einzelne Wörter!
- Delphi 2009 Kompatibilität
- als Einzeldatei verwendbar
(Achtung: im ersten Post wurde die Delphi 2009-Änderungen noch nicht geupdatet)

schwa226 18. Feb 2010 07:40

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream
 
Hi,

ich habe nun hier die "FHash_single" probiert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MD5 : ThMD5;
  s : String;
begin

  MD5.Calc('123');

  S := MD5.asHexString;
end;
Bei einem Online-Calc kommt das raus: 202cb962ac59075b964b07152d234b70
Bei D2010: 5fa285e1bebe0a6623e33afc04a1fbd5

Was mache ich falsch?

jfheins 18. Feb 2010 08:57

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream
 
Dein Delphi-String ist Unicode, der Online-Calc benutzt vermutlich ASCII ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr.
Seite 2 von 4     12 34      

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