title: Why can't md5 be reverse engineered?
body: <p>I don't know much about cryptography, but have, of course, come across the magic md5() black box on many occasions. Now, after some searching, I have been able to find many questions along the lines of "Why can't md5 be reversed?" with answers along the lines of "Because the output is non-unique." Given that the password (or whatever value) is evaluated against the hash (not the original), knowing the original isn't really even important, all you would really need to gain access to the user's account is any input that will give that hash. So, my question:</p>
  
  <p>Why can't md5 be reverse engineered to generate <strong>an input</strong> (any input, not necessarily the original) from an output (the actual function is, after all, publicly available)?</p>
  
  <p>Example:
  If I have a hash function that takes a string, assigns each character a number value, and then adds the values, I could easily reverse the function by taking the output, factoring it, and reorganizing the factors into a string (it won't be the original string, but it will give the same hash). So why can't md5 be run backwards?</p>