Преобразование ActionScript в Delphi
У меня есть следующий код ActionScript:
function EncryptString(SrcStr:String, KeyStr:String) : String
{
var KeyHexed:* = Hex.toArray(Hex.fromString(KeyStr));
var SrcHexed:* = Hex.toArray(Hex.fromString(SrcStr));
var NullPadded:* = new NullPad();
var Cipher:* = Crypto.getCipher("simple-aes128-cfb8", KeyHexed, NullPadded);
NullPadded.setBlockSize(Cipher.getBlockSize());
Cipher.encrypt(SrcHexed);
return Base64.encodeByteArray(SrcHexed);
}
Как я могу преобразовать в Delphi, используя Delphi Encryption Compendium (DEC)?
Спасибо за вашу помощь!
РЕДАКТИРОВАТЬ 1:
Я попробовал следующий Delphi-код:
function EncryptString(Param1, Param2: String): String;
var
Cipher: TCipher_Rijndael;
begin
Cipher := TCipher_Rijndael.Create;
Cipher.Mode := cmCFB8;
Cipher.Init(Param2, '', $FF);
Result := Cipher.EncodeBinary(TFormat_HEX.Encode(Param1), TFormat_MIME64);
Cipher.Free;
end;
1 ответ
Это то, что вы ищете (образец)?
Примечание: Binary = RawByteString;
uses
DECUtil, DECCipher, DECHash, DECFmt;
var
ACipherClass: TDECCipherClass = TCipher_Rijndael;
ACipherMode: TCipherMode = cmCBCx; //cmCFB8
AHashClass: TDECHashClass = THash_Whirlpool;
ATextFormat: TDECFormatClass = TFormat_Mime64;
AKDFIndex: LongWord = 1;
function Encrypt(const AText: String; const APassword: String): String; overload;
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) * 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;
procedure TForm1.Button1Click(Sender: TObject);
var
s, k: WideString;
begin
s := 'Please accept this as answer';
k := 'Stackru';
Memo1.Lines.Clear;
Memo1.Lines.Add('Encode Test: ' + Encrypt(s, k) + sLineBreak);
end;