![]() |
[DEC] WideString ver/entschlüsseln
Hallo DP,
wie kann ich mit DEC WideStrings verschlüsseln und dann entschlüsseln? Standard ist ja folgendes:
Delphi-Quellcode:
Und wie kann ich diesen kodierten WideString dann speichern?
function 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; Am besten dann in ein Byte Array :) MfG xZise |
Re: [DEC] WideString ver/entschlüsseln
Versuch es doch mit der Funktion. Sollte ja so gehen, da in einem Unicodestring eine 2 in mehreren Zeichen abgebildet wird.
|
Re: [DEC] WideString ver/entschlüsseln
Also so funktioniert es leider nicht:
Delphi-Quellcode:
Wenn ich nun ein Passwort nehme und einen Text (WideString) bekomme ich nur die 4 letzten Zeichen wieder zurück.
function 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; function 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, 1, 16), Context.KeySize)); Result := DecodeBinary(Copy(Data, 16, MaxInt)); finally Free; ProtectBinary(Data); end; end;
Delphi-Quellcode:
MfG
str := Encode(frmPassword.mePasswd.Text, App.GetText);
ShowMessage(Decode(frmPassword.mePasswd.Text, str)); xZise |
Re: [DEC] WideString ver/entschlüsseln
Du solltest hagen mal fragen, ob es die entsprechenden Funktionen auch für Unicode bzw. WideStrings gibt.
|
Re: [DEC] WideString ver/entschlüsseln
Ansonsten sollte es doch bestimmt eine Version für binäre Daten (statt der Strings) geben, welche du hierfür verwenden könntest.
|
Re: [DEC] WideString ver/entschlüsseln
Zitat:
|
Re: [DEC] WideString ver/entschlüsseln
Zitat:
BASE64 sagte mir nichts in dem Bezug. |
Re: [DEC] WideString ver/entschlüsseln
Ehm sry wenn ich pushe, aber ich bin etwas verwirrt:
Warum kann ich den ein String nicht binär ver- und wieder entschlüsseln? Ich mein ein WideString hat eben ein paar "00" zwischen den Zeichen (wenn keine Sonderzeichen verwendet werden). Und so richtig hat mir das auch nicht geholfen :) MfG xZise |
Re: [DEC] WideString ver/entschlüsseln
Wenn du es selbst auch wieder decodierst und es nicht irgendwem anders zur Decodierung weitergibst, kannst du es so machen. Eigentlich gibs dann kein Problem - von daher: was ist denn nun das Problem?
Die Verschlüsselung hat doch bestimmt eine Funktion die Entweder ein Const Parameter hat (ohne Typ) oder einen Pointer annimmt. Beim ersten gibst du einfach den WideString[0] an, beim zweiten PWideChar(WideString). Bei beiden vorher testen ob der String auch Zeichen enthält. |
Re: [DEC] WideString ver/entschlüsseln
Hi,
Ich verstehe gerade nicht, warum ich dort die Parameter ändern muss? Ich habe eben das Problem, ein WideString zu haben, den ich verschlüsseln und entschlüsseln muss. Nun wollte ich dafür das DEC verwenden, da es dafür ja perfekt ist. Und aufgrund der hohen Sicherheit von AES bzw. Rijndael benutze ich diesen. Meine konkrete Frage und das Problem ist jetzt: Kann man mithilfe von DEC ein WideString verschlüsseln? Was herauskommt (String, WideString, ByteArray) ist egal, hauptsache das entschlüsseln funktioniert dann. Zur Zeit funktioniert noch nichtmal folgendes:
Delphi-Quellcode:
Aufruf:
function Encode(const Key: String; const Text: String) : String;
var Salt: Binary; cipher : TCipher_Rijndael; begin cipher := TCipher_Rijndael.Create; try cipher.Mode := cmCBCx; Salt := RandomBinary(16); cipher.Init(THash_SHA1.KDFx(Key, Salt, cipher.Context.KeySize)); Result := TFormat_MIME64.Encode(Salt + cipher.EncodeBinary(Text)); finally cipher.Free; end; end; function Decode(const Key: String; const Text: String) : String; var Data: Binary; cipher : TCipher_Rijndael; begin cipher := TCipher_Rijndael.Create; try cipher.Mode := cmCBCx; Data := TFormat_MIME64.Decode(Text); cipher.Init(THash_SHA1.KDFx(Key, Copy(Data, 1, 16), cipher.Context.KeySize)); Result := cipher.DecodeBinary(Copy(Data, 16, MaxInt)); finally cipher.Free; ProtectBinary(Data); end; end; ShowMessage(Decode('HW', Encode('HW', 'Die Welt ist nicht genug'))); Ergebnis: siVµ³äµsF}×—Néòht genug MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz