Hallo.
Danke für den Hinweis.
Ich habe gerade folgende Funktionen bei Hagen als Verbesserungsvorschläge für die nächste
DEC Version eingereicht. Diese erweitern
DEC um die direkte WideString-Verschlüsselung ohne Umwege.
Delphi-Quellcode:
// Unit DECCipher.pas
function TDECCipher.EncodeWideString(
const Source: WideString; Format: TDECFormatClass): Binary;
var
b: binary;
begin
try
SetLength(b, Length(Source) * SizeOf(WideChar));
Move(Source[1], b[1], Length(b) * SizeOf(Char));
result := EncodeBinary(b);
finally
ProtectBinary(b);
end;
end;
function TDECCipher.DecodeWideString(
const Source: Binary; Format: TDECFormatClass): WideString;
var
b: binary;
begin
try
b := DecodeBinary(Source);
SetLength(result, Length(b)
div SizeOf(WideChar));
Move(b[1], result[1], Length(b));
finally
ProtectBinary(b);
end;
end;
// Unit DECHash.pas
class function TDECHash.CalcWideString(
const Data: WideString; Format: TDECFormatClass): Binary;
begin
Result := CalcBuffer(Data[1], Length(Data) * sizeof(WideChar), Format);
end;
// Anmerkung: Overload
class function TDECHash.KDFx(
const Data, Seed: WideString; MaskSize: Integer; Format: TDECFormatClass =
nil;
Index: LongWord = 1): Binary;
begin
Result := KDFx(Data[1], Length(Data) * sizeof(WideChar), Seed[1], Length(Seed) * sizeof(WideChar), MaskSize, Format,
Index);
end;
Wenn Hagen mir einen Verbesserungsvorschlag für die oben genannten Funktionen gibt, werde ich diesen Beitrag editieren.
Binary ist wie gesagt ein einfacher String. Hagen hat mir bestätigt, dass es im ganzen
DEC keine Probleme mit #0 innerhalb von "binary"s gibt (er sagte was von LongString nach PChar typecasten).
Sollte ich dieses WideString Problem jedoch bei Nicht-
DEC-Situationen erhalten, werde ich auf UTF8Encode() und UTF8Decode() zurückgreifen, um auf der sicheren Seite zu sein.
Danke nochmal für eure Hilfe.
War leider ein etwas langviriger Threat. Ich unterstütze zwar
Unicode, aber mit Delphi ist das teilweise kompliziert und man bekommt Steine in den Weg gelegt. Borland soll ja 2008 alle offiziellen VCLs mit
Unicode versehen haben (vgl.
Wikipedia). Ich weiß, dass es mit TNT/TMS und EldoS auch jetzt schon geht, ist aber für ein OpenSource Projekt nicht so gut, weil die Quelltext-Betrachter/Bearbeiter dann das selbe
VCL-Produkt besitzen müssen. Und TNT/TMS ist leider nicht mehr kostenlos.
Weiß jemand von euch, ob bei Delphi 2008 auch tatsächlich das
WIN32 gemeint ist, oder wartet Borland, bis
WIN32 tot ist und implementiert dann
Unicode in WIN64? Letzteres will ich nicht hoffen.
Gruß
blackdrake
EDIT: Ressourcenschutzblöcke eingefügt, siehe Kommentar von Hagen.