eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingTEA PHP i 2 różne systemy i małe problemy TEA PHP i 2 różne systemy i małe problemy
  • Data: 2010-12-06 21:40:34
    Temat: TEA PHP i 2 różne systemy i małe problemy
    Od: "Rafal\(sxat\)" <gonzak[@]op.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Witam,

    mam takiego smiesznego buga...

    na czym polega? a na tym że skypt TEA w PHPie pod windows działa
    dobrze, po przegraniu na serwer Linuxowy... przestaje poprawnie
    dekodować (są same krzaki)

    w sumie zlokalizowałem błąd - że źle dodaje/potęguje na unixie
    w tym miejscu w unbrew (algorytm przepisany z javy) ale po
    zastąpieniu tego przez np bcpow lub bcadd - dekodowanie wogole
    przestaje dzialać i na windows i pod PHpem

    jest jakaś różnica w interpretacji wartości ... ale nie wiem jak sobie
    z tym poradzić

    $v1 -= (($this->bcleftshift($v0,4) ) + $this->S[2] ^ $v0) + ($sum ^
    $this->_rshift($v0, 5)) + $this->S[3];

    co w nim może być nie tak że wartość v1 otrzymuje całkowicie inne
    wartości - choć oba systemy są 32 bitowe... przez co dekodowanie
    całkowicie nie działa

    czy to wina złego ustawienia php? (PHP_INT_SIZE:8)






    function unbrew(&$buf) {
    //assert buf.length % 2 == 1;
    $i = 1;
    while ($i<Count($buf)) {
    $n = $this->CUPS;
    $v0 = $buf[$i];
    $v1 = $buf[$i+1];
    $sum = $this->UNSUGAR;
    while ($n--> 0) {
    $v1 -= (($this->bcleftshift($v0,4) ) + $this->S[2] ^
    $v0) + ($sum ^ $this->_rshift($v0, 5)) + $this->S[3];


    $a=$this->bcleftshift($v1,4);
    $b=$this->S[0] ^ $v1;
    $c=$sum ^ $this->_rshift($v1, 5);

    $d=$this->S[1];



    $v0 -= ($a + $this->S[0] ^ $v1) + $c + $d;

    $sum -= $this->SUGAR;
    }
    $buf[$i] = $v0 & 0xffffffff;
    $buf[$i+1] = $v1 & 0xffffffff;
    $i+=2;
    }
    print_r($buf);
    }

    function _rshift($integer, $n) {
    // convert to 32 bits
    if (0xffffffff < $integer || -0xffffffff > $integer) {
    $integer = fmod($integer, 0xffffffff + 1);
    }

    // convert to unsigned integer
    if (0x7fffffff < $integer) {
    $integer -= 0xffffffff + 1.0;
    } elseif (-0x80000000 > $integer) {
    $integer += 0xffffffff + 1.0;
    }

    // do right shift
    if (0 > $integer) {
    $integer &= 0x7fffffff; // remove sign
    bit before shift
    $integer >>= $n; // right shift
    $integer |= 1 << (31 - $n); // set shifted
    sign bit
    } else {
    $integer >>= $n; // use normal
    right shift
    }

    return $integer;
    }

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: