Hallo,
ich benutze die folgende Funktion um mit dem
DEC einen String zu verschlüsseln. Diese ist vom
DEC-Beispielcode leicht abgewandelt. Wenn Salt die Länge 6 oder 8 hat, ist ein Entschlüsseln nicht mehr möglich (
Exception). Verlängere ich den Salt auf 16 Stellen klappt es. Im
DEC-Beispielcode aus der
DEC-Zipdatei wird der Salt mit RandomBinary(16) erzeugt. Also 16-stellig. Muss er immer 16 Stellen haben? Oder ist der Fehler wo anders zu suchen?
Delphi-Quellcode:
function Encrypt(const AText: string; const APassword: string; ATextFormat: TDECFormatClass; Salt: Binary): string; overload;
var
ASalt: Binary;
AData: Binary;
APass: Binary;
begin
with ValidCipher(ACipherClass).Create, Context do
try
if Salt = '' then
ASalt := RandomBinary(16)
else
ASalt := Salt;
APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
Mode := ACipherMode;
Init(APass);
SetLength(AData, Length(AText) * SizeOf(AText[1]));
Encode(AText[1], AData[1], Length(AData));
Result := ValidFormat(ATextFormat).Encode(ASalt + AData + CalcMAC);
finally
Free;
ProtectBinary(ASalt);
ProtectBinary(AData);
ProtectBinary(APass);
end;
end;