PHP GG SDK by me xD

0

Pisze Gadu-Gadu SDK pod PHP i dla jego potrzeb przetłumaczyłem m/w kod hashujący. Coś nie gra a mianowicie na delphi'm po wywołaniu funkcji z parametrami password "pieter6" i seed "2" otrzymuje liczbe "1168318011" natomiast na moim kodzie otrzymuje "1548204827". Kod w PHP powinien wyjść taki sam jak w delphi'm lecz nie jest :/ Moglibyście poprawić ten z PHP?

Mój kod:

function gg_login_hash($password, $seed)
{

$y = $seed;
$x = 0;

for ($i = 1; $i < strlen($password); $i++) {
$x = ($x & 0xFFFFFF00) | ord($password[$i]);
$y = $y ^ $x;
$y = $y + $x;
$x = $x << 8;
$y = $y ^ $x;
$x = $x << 8;
$y = $y - $x;
$x = $x << 8;
$y = $y ^ $x;

$z = $y & 0x1F;
$y = ($y << $z) | ($y >> (32 - $z));
}

return $y;
}

Tłumaczyłem ją na podstawie tych funkcji delphi:

function gg_login_hash(haslo: string; klucz: integer):integer;
var
  x, y, z, i :Integer;

  begin

    y := klucz;
    x := 0;

    for i := 1 to length(haslo) do
    begin
      x := (x and $ffffff00) or ord(haslo[i]);
      y := y xor x;
      y := y + x;
      x := x shl 8;
      y := y xor x;
      x := x shl 8;
      y := y - x;
      x := x shl 8;
      y := y xor x;

      z := y and $1F;
      y := (y shl z ) or (y shr (32-z));
    end;

    result :=y;
  end;

I z tego c++:

int gg_login_hash(unsigned char *password, unsigned int seed)
{
	unsigned int x, y, z;

	y = seed;

	for (x = 0; *password; password++) {
		x = (x & 0xffffff00) | *password;
		y ^= x;
		y += x;
		x <<= 8;
		y ^= x;
		x <<= 8;
		y -= x;
		x <<= 8;
		y ^= x;

		z = y & 0x1f;
		y = (y << z) | (y >> (32 - z));
	}

	return y;
}

Pomocy! Please...

P.S. Aha! A jak w php można zrobić pakiety takie jak w delphi'm record'y? np.

TGG_Header = record
type: integer;
length: integer;
end;
0
for i := 1 to length(haslo) do
for ($i = 1; $i < strlen($password); $i++) {

Powinno być od $i = 0. Chyba.
P.S. Aha! A jak w php można zrobić pakiety takie jak w delphi'm record'y? np.

TGG_Header = record
type: integer;
length: integer;
end;

Record to zwykły zbiór zmiennych, po prostu wysyłaj dwie liczby - typ i długość.

0

http://forum.php.pl/index.php?showtopic=21568 obadaj ten kod może Ci coś pomoże...

0

Chcesz zrobić bramkę gg? Prościej chyba zrobic prog serwerowy w ASP.NET :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1