I have been reading about quantum computers. Various governments around the world are looking into Q machines to crack encryption and hashing, because those beasties can do things SO much faster than most traditional machines as to be literally mind-blowing. But even the hottest Q machines today still have trouble cracking long-key cryptology.
Mathematically, encryption and decryption are based on Hermitian operations, that is to say "reversible" operations. You generate a long key and then use it to bit-wise XOR the string. If you have the keys, XOR is a reversible process, the technical meaning of "Hermitian" in formal math. However, the length of the key string is crucial to cracking the encryption. Short keys become possible to crack in a relatively short period. Which is why the Dept. of Defense started mandating use of the AES-256 keys. (AES = gov-speak for Advanced Encryption Standard).
In fact, in the movie "The Imitation Game" where part of the issue was cracking the Enigma code, the only reason they were able to do it was because they realized that at least certain weather dispatches would have a predictable component and they could therefore eliminate any choices that wouldn't contain that component. Their mechanical computer couldn't do all possible operations fast enough. That is, it took longer than 24 hours to compute the cipher of the day. It took so long that by the time the cipher had been broken, what it said was old news that they could read in the newspaper.
However, the moment you told their machine that certain phrases HAD to be there, it was able to crack the code fast enough to read the dispatches on the same day they were sent. The point being that it was an early example of a computationally arduous process that prevented a PRACTICAL reversal of the encryption until someone found a predictable but SHORT element that allowed them to focus on decryption by brute force. And that is the situation for modern computer cryptology.
Hashing, on the other hand, is a polynomial process that involves multiplying binary numbers together and adding them into an accumulating sum. The hash that comes out of the process is limited to some number of bits, however, so that means the numeric hash value presented by the algorithm might be only the low 64 bits or 128 bits or whatever size you are using. Which means the hash value is a TRUNCATED sum and thus cannot be reverse-factored. It doesn't have the entire sum. You have incomplete information and thus have too many guesses.
Consider, for example, the sine and arcsine functions. Reversible, right? Wrong. The sine of 45 degrees and 405 degrees are the same because you have incomplete information. The SINE function "normalized" the angle before attempting to finish the process and that means that the answer represents only PART of the input. The fact of the angle having been normalized is lost in the answer.
Anway, back to that polynomial method that has the further side-effect that when you apply it, each byte of the input stream affects multiple different parts of the accumulating sum. I.e. the multiplier used for the hash is longer than one byte so you add in components in other than the lowest byte of the sum.
There is also the "end-around-carry" potential (depending on the hash algorithm) where the overflow out of the high-order bit of the sum gets added to the low-order bit whenever that overflow occurs. So if you were hashing a string and came to an @ sign at a time when that MSB overflowed, you would get the same result as if you added an A at a time when that MSB didn't overflow. Which means that you have a "conditional collision" (A or @ producing the same effect) that depends on what was in the input stream earlier, it is the previous inputs that will govern when that overflow would occur.
Net result? A hash can ONLY be reversed in extremely rare cases such as trying to hash a string that is shorter than the key and shorter than the intended hash output. Hashing a long enough document - maybe as little as a long paragraph - reaches into the realm of the non-reversible hash.