Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] gg_http_hash - jak w php ?
Forum PHP.pl > Forum > PHP
massior
Witam :-)
Interesuje mnie przerobienie ponizszej funkcji na kod php snitch.gif
Jest mi to niezbedne do kilku operacji z protokolem gadu-gadu .
Niestety nie wiem jak to ugryzc ,wiec moglby ktos pomoc ?
Z gory dziekuje

Kod w c (libgadu - common.c) :

Kod
int gg_http_hash(const char *format, ...)
{
    unsigned int a, c, i, j;
    va_list ap;
    int b = -1;

    va_start(ap, format);

    for (j = 0; j < strlen(format); j++) {
        char *arg, buf[16];

        if (format[j] == 'u') {
            snprintf(buf, sizeof(buf), "%d", va_arg(ap, uin_t));
            arg = buf;
        } else {
            if (!(arg = va_arg(ap, char*)))
                arg = "";
        }    

        i = 0;
        while ((c = (unsigned char) arg[i++]) != 0) {
            a = (c ^ B) + (c << 8);
            b = (a >> 24) | (a << 8);
        }
    }

    va_end(ap);

    return (b < 0 ? -b : B);
}

[b]Kod w delphi (gglite.pas) :[/b]

function TGGLite.HTTPHashCode (MultiParam: array of string):integer;
  var b,i,j:integer;
  var a,c:longword;
begin

  result:=-1;

  if length(multiparam)=0 then exit;

  b:=-1;

  for i:=low(multiparam) to high(multiparam) do
  begin

   for j:=1 to length(multiparam[i]) do
   begin
     c:=ord(multiparam[i][j]);
     a:=(c xor B) + (c shl 8);
     b:=(a shr 24) or (a shl 8);
   end;

  end;

  if (b < 0) then result:=-b
  else result:=b;

end;


~kwiateusz
Używamy bbcode!!
Moli
  1. <?php
  2. function oblicz_hash ($haslo, $klucz)
  3. {
  4. $x0=0; $x1=0; $y0=0; $y1=0; $z=0; $tmp=0;
  5. $y0 = ($klucz << 16) >> 16; $y1 = $klucz >> 16 ;
  6. for ($i=0; $i<strlen($haslo); $i++)
  7. {
  8. $x0 = ($x0 & 0xFF00) | ord($haslo[$i]); $x1 &= 0xFFFF;
  9. $y0 ^= $x0; $y1 ^= $x1;
  10. $y0 += $x0; $y1 += $x1;
  11. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  12. $y0 ^= $x0; $y1 ^= $x1;
  13. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  14. $y0 -= $x0; $y1 -= $x1;
  15. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  16. $y0 ^= $x0; $y1 ^= $x1;
  17. $z = $y0 & 0x1F;
  18. $y0 &= 0xFFFF; $y1 &= 0xFFFF;
  19. if ($z <= 16)
  20. {
  21. $tmp= ($y1 << $z) | ($y0 >> (16-$z));
  22. $y0 = ($y1 >> (16-$z)) | ($y0 << $z);
  23. $y1 = $tmp;
  24. }else{
  25. $tmp= $y0 << ($z-16);
  26. $y0 = ($y0 >> (32-$z)) | ( (($y1 << $z) >> $z) << ($z-16) );
  27. $y1 = ($y1 >> (32-$z)) | $tmp;
  28. }
  29. $y0 &= 0xFFFF; $y1 &= 0xFFFF;
  30. }
  31. $hash = hexdec(sprintf("%04x%04x", $y1, $y0));
  32. settype($hash, 'integer');
  33. return $hash;
  34. }
  35. ?>


Kod wzięty z z funkcji Bakus do pobierania opisu gg smile.gif
massior
niestety nie o tej funkcji mowa :-) bo ta podana przez Ciebei sluzy do logowania sie do sieci a ta o ktorej ja mowie sluzy do rejestorwania uzytkownika lub zmiany jego hasla
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.