将 ActionScript 转换为 Delphi

Posted

技术标签:

【中文标题】将 ActionScript 转换为 Delphi【英文标题】:Converting ActionScript to Delphi 【发布时间】:2012-02-21 16:59:11 【问题描述】:

我有以下 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;

【问题讨论】:

我已将代码添加到问题中 好的。所以你有代码。有什么问题? 您使用的是 ANSI 还是 Unicode Delphi? 我正在使用 XE2。所以它应该是Unicode,对吧?它用于验证一些数据。但我没有让它与 Delphi 一起工作。 在您的 delphi 代码中尝试使用 AnsiString 而不是 String 【参考方案1】:

这是您正在寻找的(示例)吗?

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

【讨论】:

以上是关于将 ActionScript 转换为 Delphi的主要内容,如果未能解决你的问题,请参考以下文章

将 Actionscript 1 转换为 Actionscript 3

将 Actionscript 2 转换为 Actionscript 3

将 ActionScript 2 SWF 转换为 ActionScript 3 SWF 文件(可以剥离代码)

将html代码转换为actionscript代码

将 int 转换为字节 - Java 和 Actionscript 中的不同结果

是否可以将 HTML 代码转换为 ActionScript?