[edit]
Ich seh grade, dass sich dieses Thema eh endgültig "erledigt" hat.
Na gut, alles Wichtige wurde ja gesagt,
also Punkt und Ende.
[/edit]
function SHA1Text(const s: ansistring): ansistring;
wäre in so weit richtig, wenn der Code die selben Ergebnisse liefern soll, wie vor Delphi 2009.
Das Result wäre natürlich egal, da Hexadezimal als
ASCII überall gleich aussieht, also wäre
IMHO String dafür ganz passend.
So wäre der Code halbwegs kompatibel zu Hashs, die vor D2009 generiert wurden.
Allerdings ist AnsiString als Eingang auch nicht sonderlich optimal, da es bei Nicht-
ASCII-Inputs je nach CodePage (Systemstpache) unterschiedliche Ergebnisse liefern
kann wird.
Fazit: Entweder man legt fest, dass eine bestimmte CodePage als Eingang vorgeschrieben ist, z.B. Latin1.
Delphi-Quellcode:
type
Latin1 = type AnsiString(1252); // ISO 8859-1
function SHA1Text(const S: Latin1): String;
Oder man legt es besser noch auf einen
Unicode-Zeichensatz fest, wie z.B.
Unicode (UnicodeString, bzw. auch WideString für vor Delphi 2009) oder besser UTF8String.
function SHA1Text(const S: UTF8String): String;
(seit Delphi 2009 kümmert sich Windows automatisch um eine Konvertierung, wenn man da einen String oder AnsiString rein gibt.
Nur so ist gewährleistet, dass Hashs immer und überall gleich sind.
Blos zu Hashs der alten
ANSI-Version ist es nicht kompatibel.