Хорошо, ребята, несколько дней назад Я перевел мою простую функцию XOR в Delphi для PHP, и она отлично работала. Сегодня, когда я попробовал снова по неизвестной причине, он сломан. То, что я делаю, это: сначала я делаю кодировку base64 в строке, а затем я это делаю. Поэтому я отправляю его для PHP по методу POST, а в PHP я «unxor» и расшифровываю base64. Посмотрите функцию в Delphi (я использую EncodeBase64 из блока EncdDecd):Шифрование XOR в Delphi/Расшифровка в PHP
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;
Ok, поэтому я посылаю этот путь через 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 просто делает некоторый отклик в переменных расшифрованы, но я получаю все испорченный ... Что случилось?
Должен ли XOR в Delphi создавать дружественные http-символы, «us-ascii», которые будут использоваться в списке параметров lPost? Является ли http post charset UTF8 или ISO *, а получающий конец PHP-скриптом использует те же символы кодировки кодировки для отправки envvars? – Whome
Да, он должен base64 ПОСЛЕ xoring – Rahly
Я не думаю, что проблема в Http.Post или TStringList ... Даже когда я делаю в PHP: '$ decrypt = 'œš ‰ <ƒ'; (передать зашифрованное значение xor напрямую) DecryptStr ($ decrypt); ' Я все еще получаю поврежденное значение. Не знаю, почему, я проверил эти дни назад и работал, теперь только испорчен ... И я попытался base64 после xor, но поскольку xor поврежден, не работал. – user1526124