Programmation » Hash ELF en PHP
Catégorie:  
   
Hash ELF en PHP
Publié le 11/08/2008 @ 17:22:37,
Par zion
Je dois convertir un code simplissime de pascal en PHP:

  1.   function ELFHash(const Str : String) : Cardinal; 
  2. var 
  3.   i : Cardinal; 
  4.   x : Cardinal; 
  5. begin 
  6.   Result := 0
  7.   for i := 1 to Length(Str) do 
  8.   begin 
  9.     Result := (Result shl 4) + Ord(Str[i]); 
  10.     x      := Result and $F0000000; 
  11.     if (x <> 0then 
  12.     begin 
  13.       Result := Result xor (x shr 24); 
  14.     end
  15.     Result := Result and (not x); 
  16.   end
  17. end;


  1.   function GenerateELF($AFile
  2.   { 
  3.     $result = 0
  4.     $i = 0
  5.     $x = 0
  6.     $str = file_get_contents($AFile); 
  7.     for ($i=0$i<strlen($str); $i++) 
  8.     { 
  9.       $chr = $str[$i]; 
  10.       $result = ($result & 0xFFFFFFF) << 4
  11.       $result = ($result + ord($chr)) & 0xFFFFFFFF
  12.       $x = $result & 0xF0000000
  13.       if ($x != 0
  14.         $result = ($result ^ ($x >> 24))  & 0xFFFFFFFF
  15.       $result = (int)($result & (~$x)); 
  16.     } 
  17.     return $result
  18.   }


Et apparemment je me plante qqpart. Déjà avec ce le typage en PHP je rajoute quelques petits & 0xFFFFFFFF pour m'assurer que l'on reste sur 32 bits mais il me manque inévitablement quelque chose ...
Je suis le Roy :ocube:
   
Hash ELF en PHP
Publié le 11/08/2008 @ 18:28:15,
Par zion
Trouvé, c'est le $x >> 24 qui pose soucis vu que PHP traitant tout comme du signed, si on arrive en négatif le signe est récupéré à chaque >>...

Donc avec un : (($x >> 24) & 0x000000FF)

Ca roule!
Je suis le Roy :ocube:
   
Hash ELF en PHP
Publié le 11/08/2008 @ 18:35:17,
Par ovh
PHP traitant tout comme du signed

P'tain c'est bon à savoir ça :fouyaya:

Merci pour l'info :dawa:
Je n'ai rien à voir avec www.ovh.com
   
Hash ELF en PHP
Publié le 11/08/2008 @ 18:52:46,
Par zion
L'unsigned n'existe pas en PHP :dawa:

Encore une nouvelle raison de moins en faire :tinostar:
Je suis le Roy :ocube:
Répondre - Catégorie:  
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?