Hashowanie z założenia odbywa się tak, aby dało się zakodować tylko w jedną stronę. Rozkodowanie w jakimś osiągalnym czasie nie jest możliwe.
Aby porównywać np. zahashowane hasło z wpisanym przez użytkownika, to drugie również się hashuje, a następnie oba się porównuje. Czyli porównujesz hashe, a nie same wartości, które pod tymi hashami się kryją.
Jeśli chodzi o hashowanie w c#, to po wpisaniu "hash password c#" w google będziesz miał rozwiązań do wyboru, do koloru.