nickadeemus - edit: upon reading the about page, it's not quite a rainbow table implementation. It's just a database of hashes. But now that I've typed it all up anyways, have a look at rainbow tables. 😃
There's a 66~ GB list that can crack all possible LM hashes, and one that does alpha-numeric-symbol-space out to like 18 characters for NTLM hashes. Interesting stuff.
edit: also, using a salt can greatly increase the security on MD5 hashes. Using rainbow tables is a good way to get around salts, but a dictionary attack will almost always be foiled by a simple salt. and a strong salt - something using alt codes or other special character sets - will also greatly increase security against rainbow tables.
$salt = 'über:p@$S.salt';
md5($userpass . $salt);
So even if a user enters "password" as their password, the hash is actually of:
passwordüber:p@$S.salt
Almost no dictionary will have that, and the time-memory trade-off required to generate rainbow tables of that size is so large that only huge community projects can do it - and then you've got 100GB+ tables to use. It's possible, but it ain't easy. 😃