Четверг, 26.12.2024, 15:34 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024  
Перевести код с php на delphi
d4rkzyДата: Пятница, 20.06.2014, 01:21 | Сообщение # 1
Постоянный
Зарегистрирован: 15.11.2013
Группа: Пользователи
Сообщений: 135
Статус: Offline
Вот код на пхп:
Код
$pass = substr($pass, 0, 200); // limit decryption length
for ($i = 0; $i < int_divide(strlen($pass), 2); $i++)
{
      $pass[$i*2] = chr(ord($pass[$i*2]) ^ ($crypt[$i] >> 8));
      $pass[$i*2+1] = chr(ord($pass[$i*2+1]) ^ ($crypt[$i] & 0xff));
}


Мне нужно его переписать на дельфи, в итоге вышло:
Код

for i := 0 to length(Pass) do
begin
pass[i*2] := chr(ord(pass[i*2]) mod crypt[i]);
pass[I*2+1] := chr(ord(pass[i*2+1]) mod crypt[i]);
end;


Ну как и обычно он не работает, не уверен в "mod crypt[i]
Собственно вопрос, что такое
Код
^ ($crypt[$i] >> 8));  
^ ($crypt[$i] & 0xff));


И как оно выглядит в дельфи?
 
NeoДата: Вторник, 24.06.2014, 16:23 | Сообщение # 2
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
d4rkzy, Ну,во-первых: что за функция int_divide?
Во-вторых for i := 0.....Если строка в Delphi типа String,то там символы ,вроде бы, начинаются с 1.То есть надо такfor i := 1.....
Ну и основной косяк:
$pass[$i*2] = chr(ord($pass[$i*2]) ^ ($crypt[$i] >> 8));
^ -это XOR,а не mod. А ">>" это ты вообще проигнорировал.Это SHR.
pass[i*2] := chr(ord(pass[i*2]) xor (crypt[i] shr 8)); Вторая строка аналогично.
Вроде так.


Сообщение отредактировал Neo - Вторник, 24.06.2014, 16:23
 
d4rkzyДата: Среда, 25.06.2014, 06:36 | Сообщение # 3
Постоянный
Зарегистрирован: 15.11.2013
Группа: Пользователи
Сообщений: 135
Статус: Offline
Neo, Спасибо что ответил.

Переписал вот так:
Код
for i:= 0 to int_div(Length(xPass),2) do
  begin
   xPass[i*2] := chr(ord(xPass[i*2]) xor (crypt[i] shr 8));
   xPass[i*2+1] := chr(Ord(xPass[i*2+1]) xor (crypt[i]) and $ff);
  end;


Цитата Neo ()
Ну,во-первых: что за функция int_divide?

Код
// fast integer divide
  function int_divide($x, $y)
  {
   if ($x == 0)
    return 0;
   if ($y == 0)
    return FALSE;
   return ($x - ($x % $y)) / $y;
  }

Как понимаю делит integer на любое число, аля div. На дельфи нашел такую функцию:
Код
function int_div(x, y: integer): integer;
asm
   mov ebx,y {1}
   cdq {2}
   idiv ebx {3}
end;


Переписанный мною код к сожалению зависает, как понял это из за содержимого Crypt
Код
const
crypt:array[0..99] of word = ($E722, $F62F, $B67C, $DD5A, $0FDB, $B94E, $5196, $E040, $F694, $ABE2, $21BB, $FC08, $E48E, $B96A, $55D7, $A6E5,
$A4A1, $2172, $822D, $29EC, $57E4, $1458, $04D1, $9DC1, $7020, $FC6A, $ED8F, $EFBA, $8E88, $D689, $D18E, $8740,
$A6DE, $8E01, $3AC2, $6871, $EE11, $8C2A, $5FC1, $337F, $6D32, $D471, $7DC9, $0CD9, $5071, $A094, $1605, $6FD7,
$3638, $4FFD, $B3B2, $9717, $BECA, $721C, $623F, $068F, $698F, $7FFF, $E29C, $27E8, $7189, $4939, $DB4E, $C3FD,
$8F8B, $F4EE, $9395, $6B1A, $D1B1, $0F6A, $4D8B, $A696, $A79D, $BB9E, $00DF, $093C, $856F, $B51C, $F1C5, $E83D,
$393A, $03D1, $68D8, $9659, $F791, $B2C2, $0234, $9B5C, $B1BF, $72EB, $DABA, $F1C5, $DA01, $F047, $3DD8, $72AB,
$D6DD, $6793, $898D, $7757);


На пхп же массив имеет такой вид:
Код
const
crypt:array[0..99] of word = ($E722, $F62F, $B67C, $DD5A, $0FDB, $B94E, $5196, $E040, $F694, $ABE2, $21BB, $FC08, $E48E, $B96A, $55D7, $A6E5,
$A4A1, $2172, $822D, $29EC, $57E4, $1458, $04D1, $9DC1, $7020, $FC6A, $ED8F, $EFBA, $8E88, $D689, $D18E, $8740,
$A6DE, $8E01, $3AC2, $6871, $EE11, $8C2A, $5FC1, $337F, $6D32, $D471, $7DC9, $0CD9, $5071, $A094, $1605, $6FD7,
$3638, $4FFD, $B3B2, $9717, $BECA, $721C, $623F, $068F, $698F, $7FFF, $E29C, $27E8, $7189, $4939, $DB4E, $C3FD,
$8F8B, $F4EE, $9395, $6B1A, $D1B1, $0F6A, $4D8B, $A696, $A79D, $BB9E, $00DF, $093C, $856F, $B51C, $F1C5, $E83D,
$393A, $03D1, $68D8, $9659, $F791, $B2C2, $0234, $9B5C, $B1BF, $72EB, $DABA, $F1C5, $DA01, $F047, $3DD8, $72AB,
$D6DD, $6793, $898D, $7757);
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz