Antes de tudo, concordo com as outras respostas, indicando que é muito mais seguro evitar isso e armazenar apenas hashes de senhas, não as próprias senhas ou qualquer coisa que possa ser transformada novamente em senha.
Há momentos, no entanto, quando você mais ou menos precisa permitir a recuperação. No caso de senhas, geralmente você deseja recuperar, simplesmente permitindo que um administrador altere a senha quando / se necessário, em vez de recuperar a senha existente.
Outra possibilidade, no entanto, é que você permita que o usuário armazene dados no servidor criptografado com sua própria senha. Nesse caso, simplesmente permitir que um administrador altere a senha não é suficiente. A nova senha não funcionará para descriptografar os dados e a maioria dos usuários achará inaceitável que todos os dados criptografados se tornem inacessíveis quando / se esquecerem / perderem uma senha. Para essa situação, há uma alternativa razoavelmente segura e ainda permite a recuperação quando realmente necessário.
Em vez de usar a senha do usuário para criptografar os dados, você cria uma chave aleatória para criptografar os dados. Em seguida, você armazena essa chave em alguns locais: uma vez criptografada com a senha do usuário e em outro local criptografada com uma senha de administrador. Então, quando (na verdade, se) o usuário perder sua senha e não puder mais acessar os dados diretamente, você poderá usar a senha de administrador para descriptografar a chave real e usá-la para recuperar os dados e / ou criptografar novamente a chave com a nova senha do usuário.
Se você não quiser confiar completamente em um único administrador, também poderá gerenciar isso. Por exemplo, você pode decidir que cinco pessoas terão chaves de administrador e deseja que pelo menos três delas concordem antes que uma chave possa ser recuperada. Nesse caso, ao armazenar a senha criptografada para fins administrativos, você a armazena várias vezes, uma para cada conjunto de três dos cinco administradores (o que não ocupa muito espaço, pois você armazena apenas várias chaves , a ~ 256 bits cada, não várias cópias dos dados). Cada uma dessas cópias é criptografada sucessivamente com (os hashes de) cada uma das senhas dos três administradores.
Para descriptografá-lo, você precisa identificar os três administradores que estão inserindo suas senhas e escolher a chave criptografada adequada para esse conjunto de três, depois descriptografar usando cada uma das três senhas para finalmente obter a chave original. Você pode usá-lo para recuperar os dados em si ou simplesmente criptografá-los novamente com a nova senha do usuário (hash da), para que eles ainda possam acessar seus dados.
Ao fazer isso, no entanto, você realmente precisa usar um algoritmo de criptografia padrão e (por forte preferência) uma implementação padrão, bem conhecida e bem estudada.