将ActionScript转换为Delphi

3

我有以下的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 Encryption Compendium (DEC)进行转换到Delphi?

谢谢你的帮助!

编辑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;

我已将代码添加到问题中。 - Robert Darden
5
好的,所以你有一些代码。问题是什么? - Joe White
你使用的是 ANSI 还是 Unicode Delphi? - David Heffernan
我正在使用XE2。所以它应该是Unicode,对吧?它用于验证一些数据。但我在Delphi中没有让它工作。 - Robert Darden
1
在您的 Delphi 代码中,尝试使用 AnsiString 而不是 String - Warren P
显示剩余3条评论
1个回答

0

这是你要找的吗(示例)?

注意: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 := 'Stackoverflow';
  Memo1.Lines.Clear;
  Memo1.Lines.Add('Encode Test: ' + Encrypt(s, k) + sLineBreak);
end;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接