好的,几天前我在 Delphi 中为 PHP 翻译了我的简单 XOR 函数,它工作正常。今天不知什么原因再试一次,就坏了。我正在做的是:首先我在字符串中进行 base64 编码,然后对它进行异或。所以我通过POST方法将它发送给PHP,在PHP中我'unxor'并解码base64。查看 Delphi 中的函数(我使用的是 EncdDecd 单元中的 EncodeBase64):
function EncryptStr(Input: AnsiString; Seed: integer): AnsiString;
var
i : integer;
Output : AnsiString;
begin
Input:= EncodeBase64(BytesOf(UTF8Encode(Input)), Length(BytesOf(UTF8Encode(Input))));
Output := '';
for i := 1 to Length(Input) do
Output := Output + AnsiChar(Ord(Input[i]) XOR (Seed));
Result:= Output;
end;
好的,所以我通过 Indy HTTP 以这种方式发送(不知道这是否重要,但可能有用)
procedure TForm1.DoPost;
var
HTTP: TIdHTTP;
lPost: TStringList;
begin
Http:= TIDHttp.Create(nil);
lPost:= TStringList.Create;
Http.Request.UserAgent:='Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)';
lPost.Add('PNAME=' + EncryptStr('test.exe', 232));
lPost.Add('BYTETYPE=' + EncryptStr('UNICODE', 232));
Http.Post('http://192.168.1.12/panel.php?uid=09ed-erty-as98-1498', lPost);
在 PHP 中,我以这种方式接收/解密:
function DecryptStr($str)
{
$key = '232'; //key need to be the same as hook is using!
$strsize = @strlen($str);
$j = @strlen($key);
for($i=$strsize-1; $i >= 0; $i--)
{
$str[$i] = @chr(@ord($str[$i]) ^ $key);
}
$str = base64_decode($str);
return $str;
}
if(isset($_POST['PNAME']) && isset($_POST['BYTETYPE']) && ($_POST['BYTETYPE'] != ''))
{
saveInfo($uid, DecryptStr($_POST['PNAME']), DecryptStr($_POST['BYTETYPE']), $con);
}
saveInfo 函数只是在解密的变量中做一些回显,但我把所有东西都损坏了……怎么了?