Autor | Zpráva | ||
---|---|---|---|
dErOiN Profil * |
Zdravím,
funkce udb_hash je v PAWN ( jazyk pro gta samp ) zahashování ...pry adler32 jenze mi to vzdy ukaze jinou hodnotu... v PHP mam tu funkci takto : ============================================= function _udbhash( $pass ) { $length = strlen($pass); $s1 = 1; $s2 = 0; for($i=0; $i<$length; $i++) { $s1 = ($s1 + $pass[$i]) % 65521; $s2 = ($s2 + $s1) % 65521; } return ($s2 << 16) + $s1; } v PAWN vypadá takto ============================================= stock udb_hash(buf[]) { new length=strlen(buf); new s1 = 1; new s2 = 0; new n; for (n=0; n<length; n++) { s1 = (s1 + buf[n]) % 65521; s2 = (s2 + s1) % 65521; } return (s2 << 16) + s1; } poraďte někdo prosím, spěchá :( Moderátor Joker: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
Majkl578 Profil |
#2 · Zasláno: 14. 2. 2010, 04:45:28 · Upravil/a: Majkl578
Pokud je to adler32, proč nepoužiješ funkci hash?
hash('adler32', 'something'); Co se přepsání toho kódu týče: Myslím si, že by jsi měl převést znak na jeho ASCII hodnotu (řádek 8 v [#1]). Vrácená hodnota z předchozího kódu je v hexadecimální podobě. function udbHash($pass) { $a = 1; $b = 0; for($i = 0, $len = strlen($pass); $i < $len; $i++) { $a = ($a + ord($pass[$i])) % 65521; $b = ($a + $b) % 65521; } return dechex(($b << 16) + $a); } Toto by tedy měl být ekvivalent. echo dechex(udbHash('blah')); //3fa0198 echo '<br>'; echo hash('adler32', 'blah'); //03fa0198 Nevím, jestli je problém ta nula na začátku, ale není problém si ji případně upravit změnou return dechex(($b << 16) + $a); na return '0' . dechex(($b << 16) + $a); Ale myslím si, že použití přímo funkce hash() bude praktičtější. |
||
dErOiN Profil * |
neres adler32.....na serveru ( v gta ) mi tato funkce
stock udb_hash(buf[]) { new length=strlen(buf); new s1 = 1; new s2 = 0; new n; for (n=0; n<length; n++) { s1 = (s1 + buf[n]) % 65521; s2 = (s2 + s1) % 65521; } return (s2 << 16) + s1; } da hodnotu jinou, nez ta funkce v php ...o to se mi jedna .. treba ve hre to udela z hesla 'necum' : 104792601 a tim php mi to udela z hesla 'necum' : 327681 Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
Davex Profil |
#4 · Zasláno: 14. 2. 2010, 11:09:01
Majkl578 má pravdu, chyba je na řádku č. 8:
$s1 = ($s1 + ord($pass[$i])) % 65521; |
||
Majkl578 Profil |
#5 · Zasláno: 14. 2. 2010, 18:48:57
dErOiN:
> da hodnotu jinou, nez ta funkce v php ...o to se mi jedna .. > treba ve hre to udela z hesla 'necum' : 104792601 > a tim php mi to udela z hesla 'necum' : 327681 Jo? Mně to teda v PHP vrátí to samé (v desítkové podobě, tedy bez použití dechex). |
||
Časová prodleva: 14 let
|
0