in reply to Re: Re: Re: hash collision DOS
in thread hash collision DOS
|
---|
Replies are listed 'Best First'. | ||
---|---|---|
Re: Re: Re: Re: Re: hash collision DOS
by crazyinsomniac (Prior) on Jun 02, 2003 at 23:22 UTC | ||
Do all the keys map to one bucket? I'm pretty sure they don't. The only way all the various keys would map to one bucket would be when you construct a hash by calling Vars. Do you see what I'm saying, or did I miss something crucial. update: I improved the 2nd snippet. Now it shows all the various keys going to a single bucket. update: Why not just post the example?
| [reply] [d/l] [select] | |
by iburrell (Chaplain) on Jun 03, 2003 at 00:16 UTC | ||
The way to determine what is happening inside a hash is evaluating it in scalar context. That gives you the number of buckets being used. tilly wrote a program that uses this feature to generate a list of colliding keys. This algorithm is fast and doesn't depend on reverse engineering the Perl hash algorithm. I ran some tests on a 10,000 keys generated by tilly's method. Both inserting them into a hash and parsing the query string with CGI. It takes over 20 seconds to parse the query string in the pathological case versus less than a second for 10,000 normal strings. I haven't been willing to wait long enough to let 100,000 strings run. For a sample, here are the first 10 integers that collide and the scalar hash value showing they all go in one bucket.
| [reply] [d/l] |