Thema: Delphi Unicode + BASE64?

Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 

Re: Unicode + BASE64?

  Alt 27. Aug 2007, 02:35
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.
Daniel Marschall
  Mit Zitat antworten Zitat