Нельзя надежно перевернуть хешированный пароль в исходную строку.Тем не менее, возможно восстановить НЕКОТОРЫЕ допустимые входные данные, которые дают данный хэш.Я даю этот ответ, потому что другие ответы верны лишь частично, и важно понять относительную безопасность хеш-функции.
Чтобы понять это, предположим, что вы используете 1-битный алгоритм хеширования (то естьхеш равен 1 или 0).Половина всех строк, которые вы хэшируете, даст "1".Разверните это до 2-битного хэша, и строки 1-в-4, которые вы случайным образом хешируете, приведут к заданному значению хэша (хэши будут 0, 1, 2 или 3 ... в двоичном 00, 01, 10, 11).Разверните это, скажем, 128 битов, и, хотя коллизии хешей FAR менее распространены, они все же происходят.Если ваш хэш-алгоритм имеет известные уязвимости, его можно легко вычислить с вычислительной точки зрения.
Например, MD5 можно атаковать с помощью Rainbow Tables .Существуют онлайн-сервисы, которые предлагают «взлом» хеша, например http://md5crack.com/. Здесь взлом означает восстановление НЕКОТОРОГО допустимого ввода, который дает хеш.Даже грубые взломы жизнеспособны при современных вычислительных мощностях, особенно при использовании подхода на основе графических процессоров и / или распределенных вычислений.
Хеши - отличный инструмент, но имейте в виду ваши требования безопасности и относительную простоту обращения вспятьхэш, сгенерированный выбранным вами алгоритмом хеширования в некоторый допустимый ввод, который дает этот хеш.Кроме того, всегда будьте уверены и используйте солт-значение со своим хэшем.
ОБНОВЛЕНИЕ
Теперь, когда вопрос переписан, я бы направил вас к шифрованию AES,См.
Использование шифрования AES в C #