difference between Hashing and Encryption algorithms
Hashing is result of an irreversible function applied on a data.
Encryption is a reversible function applied on a data.
For Ex: with an idea of hiding/unexposing a data X , you want to transform its state to Y with a function.
Y = 2* X;
So now you transmit/use the data Y and at destination X can be regenerated by (Y/2). = simplest example of Encryption.
Now if our function is Y = (int) ( X /2) ; // integer part of it.
Now Y = 3 when X = 6 or 7
For a given Y we cannot find X (There is a loss of information )
Also Y is not Unique for multiple inputs of X.
Hashing is a technique of creating semi-unique keys based on larger pieces of data. In a given hash you will eventually have "collisions" (e.g. two different pieces of data calculating to the same hash value) and when you do, you typically create a larger hash key size.
Encryption providea a 1:1 mapping between an arbitrary length input and and output. And they are always reversible. The important thing to note is that it's reversible using some method. And it's always 1:1 for a given key. Now, there are multiple input:key pairs that might generate the same output (in fact there usually are, depending on the encryption function). Good encrypted data is indistinguishable from random noise. This is different from a good hash output which is always of a consistent format.
obfuscation is any kind of masking/shielding data (No loss ) to make it difficult to read A typical example is ..
In a DotNet world, an assembly can be peeped in and reverse engineered / etc... can be observed by reflector ..etc.. But obfuscated assembly will be difficult to debug / peep in because of a kind of ZIP algorith they undergo with obfuscatind tools.