![]() |
Re: [DEC] WideString ver/entschlüsseln
Zitat:
Gruß hagen |
Re: [DEC] WideString ver/entschlüsseln
Hallo Mütze und Hagen,
ich glaube kaum, dass es tatsächlich am debugger liegt, dass er #0 einfügt. Zitat:
Es ist die gleiche Variable vom Typ "WideString", also sollte der Debugger eigentlich selbstständig erkennen, dass es aus Words bzw. WideChars besteht? Ich meine wenn man sowas macht:
Delphi-Quellcode:
Warum sollte, wenn als Ergebnis von TueDasUndDas wieder ein WideString herauskommt, aufeinmal #0 mitten im String auftauchen?
var
myWideString : WideString; myWideString := 'Ein WideString'; myWideString := TueDasUndDas(myWideString); Zitat:
Zitat:
Nagut, selbst wenn ihr darauf einen Grund habt: Ich habe diesmal debuggt mit Speicherauszug, und das Ergebnis seht hier: Vor der Entschlüsselung und Verschlüsselung:
Code:
Nach der Entschlüsslung und Verschlüsselung:
$68 $00 $74 $00 $74 $00 $70 $00 $3A $00 $2F $00 $2F $00 $77 $00 $77 $00 $77 $00 $2E $00 $67 $00 $6F $00 $6F $00 $67 $00 $6C $00 $65 $00 $2E $00 $64 $00 $65 $00
Code:
(
$68 $00 [b]$00 $00[/b] $74 $00 [b]$00 $00[/b] $74 $00 [b]$00 $00[/b] $70 $00 $00 $00 $3A $00 $00 $00 $2F $00 $00 $00 $2F $00 $00 $00 $77 $00 $00 $00 $77 $00 $00 $00 $77 $00 $00 $00 $2E $00 $00 $00 $67 $00 $00 $00 $6F $00 $00 $00 $6F $00 $00 $00 $67 $00 $00 $00 $6C $00 $00 $00 $65 $00 $00 $00 $2E $00 $00 $00 $64 $00 $00 $00 $65 $00 $00 $00
![]() Was sehen wir: 3 Byte (also genau 2 Byte zu viel) Nullen ;) Ich habe nur die ersten 3 falschen Zeichen markiert. MfG xZise [edit=1]Ich habe mal die Antwort verbessert...[/edit] [edit=2]Ich habe das Ergebnis des Debuggers vor und nach der "Tortur" ( ;) ) angegeben und mal ein bisschen gehighlightet[/edit] |
Re: [DEC] WideString ver/entschlüsseln
Tja, mein Verdacht: Irgendjemand interpretiert den Widestring als Ansistring und wandelt in wieder in einen Widestring um.
|
Re: [DEC] WideString ver/entschlüsseln
Naja, da kommt an sich nur das Verschlüsseln etc. in betracht:
Delphi-Quellcode:
1. Abfrage in der ersten Zeile und die zweite Abfrage nachdem er die 3. Zeile durchlaufen ist.
decryptedText := <WideString>; // Eine speicherung in der Variable, damit der Debugger den Inhalt anzeigt
str := EncryptW(<WideString>, <Passwort (WideString)>); // Verschlüsselung (PW + Text sind jetzt Widestrings) if DecryptW(str, <Passwort (WideString)>, decryptedText) then // Entschlüsslung mit dem Passwort der Zeile drüber, also identisch begin fs.Write(Pointer(str)^, Length(str)); // Speicherung des Strings end; MfG xZise [edit=1]Interessant ist, dass die Entschlüsselung als Result dennoch true zurückgibt, obwohl sie eigentlich false ergeben sollte (oder?)[/edit] |
Re: [DEC] WideString ver/entschlüsseln
Alles von mir - auf was du dich so schön beziehst - hatte ich auf folgende 0-Bytes bezogen:
Zitat:
Das bei dir im Endeffekt aber $00 $00 zusätzlich pro Zeichen im String sind, war nicht Gegenstand meines Beitrags. /EDIT: Wir reden vollkommen aneinander vorbei. Von daher: vergiß es. Diskussion (mit mir) beendet. |
Re: [DEC] WideString ver/entschlüsseln
Zitat:
Und ich verstehe nicht so richtig, was du mir damit zeigst? Ich könnte die natürlich in einer Schleife entfernen, oder der Fehler wird direkt eingedämmt. MfG xZise |
Re: [DEC] WideString ver/entschlüsseln
Also doch ein Wide-WideString. Irgendeine Typumwandlung macht aus einem WideString einen doppelt-gemoppelten Wide-WideString. Schau mal ob du bei MessageBoxW(PWideChar(WideStrng),...) mit MessageBoxW(PWideChar(@WideString[1]), ...) oder MessageBoxW(Pointer(@WideString[1]),...) was erreichen kannst.
Gruß Hagen |
Re: [DEC] WideString ver/entschlüsseln
Hi Hagen,
weder noch erreichen, dass der WideString dabei bleibt. MfG xZise |
Re: [DEC] WideString ver/entschlüsseln
Ok, probier das nochmal aus.
Delphi-Quellcode:
Gruß Hagen
var
ACipherClass: TDECCipherClass = TCipher_Rijndael; ACipherMode: TCipherMode = cmCBCx; AHashClass: TDECHashClass = THash_SHA1; ATextFormat: TDECFormatClass = TFormat_MIME64; AKDFIndex: LongWord = 1; function Encrypt(const AText: WideString; const APassword: WideString): WideString; var ASalt: Binary; AData: Binary; APass: Binary; begin with ValidCipher(ACipherClass).Create, Context do try ASalt := RandomBinary(16); APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * 2, ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex); Mode := ACipherMode; Init(APass); SetLength(AData, Length(AText) * 2); Encode(AText[1], AData[1], Length(AData)); Result := ValidFormat(ATextFormat).Encode(ASalt + AData + CalcMAC); finally Free; ProtectBinary(ASalt); ProtectBinary(AData); ProtectBinary(APass); end; end; function Decrypt(const AText: WideString; const APassword: WideString): WideString; var ASalt: Binary; AData: Binary; ACheck: Binary; APass: Binary; ALen: Integer; begin with ValidCipher(ACipherClass).Create, Context do try ASalt := ValidFormat(ATextFormat).Decode(AText); ALen := Length(ASalt) -16 -BufferSize; AData := System.Copy(ASalt, 17, ALen); ACheck := System.Copy(ASalt, ALen +17, BufferSize); SetLength(ASalt, 16); APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) *2, ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex); Mode := ACipherMode; Init(APass); SetLength(Result, ALen div 2); Decode(AData[1], Result[1], ALen); if ACheck <> CalcMAC then raise Exception.Create('Invalid data'); finally Free; ProtectBinary(ASalt); ProtectBinary(AData); ProtectBinary(ACheck); ProtectBinary(APass); end; end; |
Re: [DEC] WideString ver/entschlüsseln
Hallo Hagen,
mit dieser Version funktioniert. Nun habe ich die "Stringausgabe"-Variante benutzt. Vielleicht funktionierte die nur nicht... MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 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