>De : Nikita Popov [mailto:nikita....@gmail.com] 
>Envoyé : dimanche 29 novembre 2015 12:45
>À : Pascal KISSIAN
>Cc : PHP internals
>Objet : Re: HashDos protection

>Collisions in DJBX33A are (integer overflow notwithstanding) completely 
>independent of the starting value, so randomizing it wouldn't help. If you're 
>interested in how DJB collisions are constructed, see 
>http://www.phpinternalsbook.com/hashtables/hash_algorithm.html#hash-collisions.

 

              Very interesting reading, thanks…

 

 

 

>Similarly, this would not have any effect either. We reduce hashes using an 
>equivalent of hash % table_size, which is the same as (hash + N * table_size) 
>% table_size for any N. If you simply add an additional number to it, the same 
>relation still holds: (hash + salt) % table_size == (hash + salt + N * 
>table_size) % table_size, so elements that collided previously still collide.

 

You’re absolutely right!  Just adding something results in a translation of the 
hash table cell…

Perhaps another operation could do the job?  Multiply still keeps the collision 
for the modulo equal to 0… perhaps add + multiply ….

 

However, my main feeling is that "An ounce of prevention is worth a pound of 
cure"…
… and my preferences will go to your second option …  taking care of not 
degrading performance…

 

pk

Reply via email to