![]() |
Verschlüsselung: Unterschied von const und var ???
Hallöle...:P
Ich hätte dann mal ein Problem... 8-) Ich habe eine Verschlüsselungsmethode, geborgt aus dem Internet, die gut funktioniert. Diese wollte ich erweitern...nun kommt als Result nichts raus. :shock:
Delphi-Quellcode:
Original:
// extra Unit
const conKey = 'ZdrjE[dyhf'; var aCipherMode: TCipherMode = cmCBCx; aHashClass: TDECHashClass = THash_SHA256; aTextFormat: TDECFormatClass = TFormat_MIME64; aKDFIndex: LongWord = 1;
Delphi-Quellcode:
Erweiterungen:
class function TdTools.Decrypt(aHash: string): string;
var Cipher: TCipher_Rijndael; aSalt: Binary; aData: Binary; aCheck: Binary; aPass: Binary; aLen: Integer; begin Cipher := TCipher_Rijndael.Create; try aSalt := ValidFormat(aTextFormat).Decode(RawByteString(aHash)); aLen := Length(aSalt) - 16 - Cipher.Context.BufferSize; aData := Copy(aSalt, 17, aLen); aCheck := Copy(aSalt, aLen + 17, Cipher.Context.BufferSize); SetLength(aSalt, 16); aPass := ValidHash(aHashClass).KDFx(conKey[1], Length(conKey) * SizeOf(conKey[1]), aSalt[1], Length(aSalt), Cipher.Context.KeySize, TFormat_Copy, aKDFIndex); // Konstante Cipher.Mode := aCipherMode; Cipher.Init(aPass); SetLength(Result, aLen div SizeOf(aHash[1])); Cipher.Decode(aData[1], Result[1], aLen); if aCheck <> Cipher.CalcMAC then Result := ''; finally Cipher.Free; ProtectBinary(aSalt); ProtectBinary(aData); ProtectBinary(aCheck); ProtectBinary(aPass); end; end;
Delphi-Quellcode:
Seit gestern ist es zu früh für das Problem...:zwinker: Da kann man eigentlich nichts falsch machen. Ich tippe auf den Unterschied von const und var...aber warum?
class function TdTools.Encrypt(aText: string; const aKey: string): string;
var Cipher: TCipher_Rijndael; aSalt: Binary; aData: Binary; aPass: Binary; Key: string; begin if aKey = '' then begin Key := conKey; end else begin Key := aKey; end; Cipher := TCipher_Rijndael.Create; try aSalt := RandomBinary(16); aPass := ValidHash(aHashClass).KDFx(Key, Length(Key) * SizeOf(Key[1]), aSalt[1], Length(aSalt), Cipher.Context.KeySize, TFormat_Copy, aKDFIndex); // Variable Cipher.Mode := aCipherMode; Cipher.Init(aPass); SetLength(aData, Length(aText) * SizeOf(aText[1])); Cipher.Encode(aText[1], aData[1], Length(aData)); Result := string(ValidFormat(aTextFormat).Encode(aSalt + aData + Cipher.CalcMAC)); finally Cipher.Free; ProtectBinary(aSalt); ProtectBinary(aData); ProtectBinary(aPass); end; end; Danke für Infos...:P |
AW: Verschlüsselung: Unterschied von const und var ???
Guten Morgen,
kann es sein, dass conKey ein ShortString (Ansi) ist und Dein anderer Key ein UniCode String. Weil mumpitz Grüße Klaus |
AW: Verschlüsselung: Unterschied von const und var ???
Du rufst ValidHash falsch auf.
Delphi-Quellcode:
aPass := ValidHash(aHashClass).KDFx(Key[1], Length(Key) * SizeOf(Key[1]), aSalt[1], Length(aSalt), Cipher.Context.KeySize, TFormat_Copy, aKDFIndex); // Variable
|
AW: Verschlüsselung: Unterschied von const und var ???
Moin...:P
Dankeschön für deine Anteilnahme. :wink: Ich hatte im Original noch einen Fehler drin. :evil: Original:
Delphi-Quellcode:
Funktionierend:
// Decode
aPass := ValidHash(aHashClass).KDFx(conKey, Length(conKey) * SizeOf(conKey[1]), aSalt[1], Length(aSalt), Cipher.Context.KeySize, TFormat_Copy, aKDFIndex); // [1] fehlt! // Encode aPass := ValidHash(aHashClass).KDFx(conKey[1], Length(conKey) * SizeOf(conKey[1]), aSalt[1], Length(aSalt), Cipher.Context.KeySize, TFormat_Copy, aKDFIndex);
Delphi-Quellcode:
Vieleicht hat das den Unterschied gemacht...:P
// Decode
aPass := ValidHash(HashClass).KDFx(aKey[1], Length(aKey) * 2, Salt[1], Length(Salt), Cipher.Context.KeySize, TFormat_Copy, KDFIndex); // - SizeOf(Key) // Encode aPass := ValidHash(HashClass).KDFx(aKey[1], Length(aKey) * 2, Salt[1], Length(Salt), Cipher.Context.KeySize, TFormat_Copy, KDFIndex); // - SizeOf(Key) Zitat:
|
AW: Verschlüsselung: Unterschied von const und var ???
Ja. Methoden, die keinen bestimmten Inhaltstyp erwarten, weil sie den Inhalt über eine unbedingt anzugebene Länge lediglich binär und ohne seine semantische Bedeutung auslesen, brauchen einen Zeiger auf das erste Element das Objekts, also [1] bei Strings und [0] bei allem anderen. Records und Arrays werden dazu packed definiert. Sieht man in der Winapi sehr oft.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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