Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Hash-Funktion (https://www.delphipraxis.net/125935-hash-funktion.html)

himitsu 29. Dez 2008 14:57

Re: Hash-Funktion
 
Liste der Anhänge anzeigen (Anzahl: 1)
erstmal nur was zum Code

die "globalen" Variablen sind etwas verwirrend (beim Codeverstehn, da man nicht so direkt nachvollziehen kann wie die wohin übergeben und verwendet werden)
Delphi-Quellcode:
var schluessel: byte; //primär Schlüssel
    high, low: byte;
    vz, laenge, sS : integer;
    ch : boolean;
dann wäre es nicht nötig gewesen intern je eine Funktion für String und ByteArra zu machen.
(doppelter Code)

mit String hast'e unter D2009 einige Probleme, da dieses dort standardmäig ein UnicodeString ist (2 Byte pro Char) ... wär wohl besser AnsiString zu verwenden

ist dir aufgefallen, daß String und ByteArray eine unterschiedliche Indizierung der Elemente verwenden?
(so auf dn ersen blick sieht es so aus, als wenn du immer von 1 bis Length-1) arbeitest, aber
ByteArray: 0 bis Length-1
String: 1 bis Length
was doch eigentlich in 'ner fehlerhaften/unterschiedlichen Berechnung resultieren dürfte (noch nicht getestet)

nja und auf ein/zwei Optimierungen geh ich erstmal nicht ein, da es hier wohl mehr nur auf das Prinzip (die Berechnung) ankommt



[add]
im Anhang mal die Unit ohne mehrfachen Code für String und ByteArray (jetzt geben beide Hash-Funktionen auch auf jedenfall das Selbe Ergebnis aus)

es sollte aber zusätzlich dennoch die Sache mit den "globalen" Variablen reguliert werden!

Dieses hier (siehe folgender Code) liefert mit deinem Original-Quellcode unterschiedliche Hashs,
obwohl die übergebenen Daten den selben Inhalt aufweisen und es sollte doch keinen Unterschied machen, ob die Daten in einer "Datei" (TByteM) oder einem "Text" (String) vorliegen :warn:

Delphi-Quellcode:
var S: String;
    B: TByteM;
begin
  S := '123456789';
  SetLength(B, Length(S));
  Move(S[1], B[0], Length(S));
  Edit1.Text := hash(S);
  Edit2.Text := hash(B);
end;
Code:
Edit1: 8C131659DD81F2174918ECE7A386C19C0215B56C5C838A21BB127EF1158053A6
Edit2: 25CFAF1DA1ADD7457F9B158B637943B33B5781F1313BAF1F0913DD5DF709118B


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:47 Uhr.
Seite 3 von 3     123   

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