Преобразование 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;
Другие вопросы по тегам