Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DEC 5.2 - Unicode string Verschlüselung unter Delphi 2009 (https://www.delphipraxis.net/148225-dec-5-2-unicode-string-verschlueselung-unter-delphi-2009-a.html)

Stoni1001 25. Feb 2010 09:52


DEC 5.2 - Unicode string Verschlüselung unter Delphi 2009
 
Guten Tag,

Ich hab leider ein kleines Problem, bei der Verschlüsselung von einem Unicode string.

habe aus dem Post Delphi-Praxis
von Herrn Hagen den Code genommen.

Delphi-Quellcode:
class function TCrypt.Encode(const Key: String; const Text: String): String;
var
  Salt: Binary;
begin
  with TCipher_Rijndael.Create do
  try
    Mode := cmCBCx;
    Salt := RandomBinary(16);
    Init(THash_SHA1.KDFx(Key, Salt, Context.KeySize));
    Result := TFormat_MIME64.Encode(Salt + EncodeBinary(Text));
  finally
    Free;
  end;
end;

class function TCrypt.Decode(const Key: String; const Text: String): String;
var
  Data: Binary;
begin
  with TCipher_Rijndael.Create do
  try
    Mode := cmCBCx;
    Data := TFormat_MIME64.Decode(Text);
    Init(THash_SHA1.KDFx(Key, Copy(Data, 0, 16), Context.KeySize));
    Result := DecodeBinary(Copy(Data, 17, MaxInt));
  finally
    Free;
    ProtectBinary(Data);
  end;
end;

so einfache Texte wie 'Das ist ein Test' oder '12341234asdfgsdg' ist kein Problem zu ver- bzw. entschlüsseln
jedoch hab ich dann versucht den Text 'Alpha' auf griechisch (Αλπηα) zu verschlüsseln und bei meinem Test-Programm bekomm ich dann nach der Entschlüsselung folgenden string: '??p?a'

Noch zu meinem TestProgramm:

Ich geb in einem Edit meinen Text ein den ich entschlüsseln will. verschlüssel dann diesen und geb das Resultat in ein anderes Edit aus.
für das Entschlüsseln zieh ich dann quasi den Text vom 2ten Edit heran.

Ich hoff ihr könnt mir hier weiterhelfen. was mach ich falsch bzw. was müsste ich machen, damit ich auch griechische Zeichen verschlüsseln/entschlüsseln kann.

Danke schon mal im Voraus für eure Hilfe!

Assertor 25. Feb 2010 09:55

Re: DEC 5.2 - Unicode string Verschlüselung unter Delphi 200
 
Hallo,

erstmal herzlich Willkommen in der DP! :party:

Warum nutzt Du nicht einfach mein Beispiel was der DEC 5.2 beiliegt (Example.txt im Hauptverzeichnis aus dem Zip)?

Gruß,
Assertor

himitsu 25. Feb 2010 09:59

Re: DEC 5.2 - Unicode string Verschlüselung unter Delphi 200
 
Sind EncodeBinary und DecodeBinary (auch) als Unicode- oder nur als Ansi-Versionen verfügbar,
bzw. meckert Delphi irgendwo über irgendwas vonwegen Stringumwandlungen?

Ich vermute jetzt einfach mal, daß diese Funktionen nur als Ansi existieren, welches natürlich für das Wegfallen von Informationen des Unicodestrings sorgen würden.

Stoni1001 25. Feb 2010 10:21

Re: DEC 5.2 - Unicode string Verschlüselung unter Delphi 200
 
dankeschön :)

ja mit dem Beispiel funktioniert es. vielen Dank für die schnelle Rückmeldung.

Assertor 25. Feb 2010 12:12

Re: DEC 5.2 - Unicode string Verschlüselung unter Delphi 200
 
Zitat:

Zitat von Stoni1001
dankeschön :)

ja mit dem Beispiel funktioniert es. vielen Dank für die schnelle Rückmeldung.

Keine Ursache, das freut mich!

Gruß,
Assertor

:dp:

himitsu 25. Feb 2010 12:18

Re: DEC 5.2 - Unicode string Verschlüselung unter Delphi 200
 
Hab inzwischen auch mal reingesehn:

EncodeBinary und DecodeBinary arbeiten nur mit dem Typ "Binary", welcher als AnsiString, bzw. einem RawByteString (welcher auch einem AnsiString entspricht) deklariert und für "binäre" Daten gedacht ist.

Tja und bei String/UnicodeString > Binary/AnsiString > String/UnicodeString müssen zwangsweise Unicodeinformationen verloren gehn.

Allerdingt gibt der Compiler bei sowas standardmäßig eine Warnung aus. :gruebel:

Assertor 25. Feb 2010 12:20

Re: DEC 5.2 - Unicode string Verschlüselung unter Delphi 200
 
Hi himitsu,

wollte Deinen Post nicht übergehen, sondern für den TE abkürzen :)

Zitat:

Zitat von himitsu
Hab inzwischen auch mal reingesehn:

EncodeBinary und DecodeBinary arbeiten nur mit dem Typ "Binary", welcher als AnsiString, bzw. einem RawByteString (welcher auch einem AnsiString entspricht) deklariert und für "binäre" Daten gedacht ist.

Tja und bei String/UnicodeString > Binary/AnsiString > String/UnicodeString müssen zwangsweise Unicodeinformationen verloren gehn.

Allerdingt gibt der Compiler bei sowas standardmäßig eine Warnung aus. :gruebel:

Absolut Richtig. Irgendwann werd ich die Sache mal als Overload ins DEC 5.3 packen (und ein bisschen Refactoring betreiben), aber im Moment fehlt mir dafür die Zeit...

Gruß,
Assertor


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 Uhr.

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