将 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 文件(可以剥离代码)