Just a clarification here:
md5 is a one way algorithm, this should be as well fairly obvious, if you know that hashes in general are used for example, to determine if a file has been tampered with. It is extremely unlike that if you make the md5sum over an ISO image for example, that you can reconstruct the iso image by knowing the hash
the only way to "crack" md5, is to brute force the algorithm. That doesn't mean that there are no ways which are more efficient than your standard brute force by looping though all possible combinations. It is amazing, when it comes to passwords for example, how many ppl will use a standard word, or name, or birthdate, etc. The main functionality of all password cracking programs uses dictionaries, where words are tried out and used to attempt to break the password.
While this approach is often quite useless for a given single password, it usually yields good results on a collection of passwords, like a linux passwd file, which has been aquired the one way or the other, on machines with many users. While most of the users will be aware that they should use some more complicated password, which can't be broken that easily, and as well something which is longer than the average 4-5 characters, there will be always the one or other used which either will use a standard word with standard spelling, or, possibly a very short password, which can be much easier brute-forced than a long one ( every character lenght, adds one power to the O(f), where f is a function of something like 96^n, means if the password is one char long, you will need 96 tries, if it is two characters long 96*96, etc. which progresses nicely exponentially. )
Of course, should we ever build a quantum computer, then this calculations will be irrelevant, as a quantum computer will be able to solve all P-complete problems in one!! single iteration, and possibly quite a few NP-complete in a very low time, which will make most kinds of current encryptions quite obsolete.