Tout d'abord, je suis d'accord avec les autres réponses en soulignant qu'il est beaucoup plus prudent d'éviter cela, et ne stocke que les hachages de mots de passe, pas les mots de passe eux-mêmes, ou tout ce qui peut être transformé en mot de passe.
Cependant, il arrive parfois que vous ayez plus ou moins besoin de permettre la récupération. Dans le cas des mots de passe, vous souhaitez généralement récupérer en autorisant simplement un administrateur à modifier le mot de passe lorsque / si nécessaire plutôt qu'en récupérant le mot de passe existant.
Une autre possibilité, cependant, est que vous autorisiez l'utilisateur à stocker des données sur le serveur crypté avec son propre mot de passe. Dans ce cas, autoriser simplement un administrateur à modifier le mot de passe ne suffit pas . Le nouveau mot de passe ne fonctionnera pas pour décrypter les données et la plupart des utilisateurs trouveront inacceptable que toutes leurs données cryptées deviennent inaccessibles quand / s'ils oublient / perdent un mot de passe. Dans cette situation, il existe une solution raisonnablement sécurisée qui permet toujours une récupération lorsque cela est vraiment nécessaire.
Au lieu d'utiliser le mot de passe de l'utilisateur pour chiffrer les données, vous créez une clé aléatoire pour chiffrer les données elles-mêmes. Vous stockez ensuite cette clé à deux endroits: une fois chiffrée avec le mot de passe de l'utilisateur et à un autre endroit chiffrée avec un mot de passe administrateur. Puis, quand (pas vraiment si) l'utilisateur perd son mot de passe et ne peut plus accéder directement aux données, vous pouvez utiliser le mot de passe administrateur pour déchiffrer la clé réelle et l'utiliser pour récupérer les données et / ou rechiffrer la clé avec le nouveau mot de passe de l'utilisateur.
Si vous ne voulez pas totalement faire confiance à un seul administrateur, vous pouvez également le gérer. Par exemple, vous pouvez décider que 5 personnes auront des clés d’administrateur et vous voulez qu’au moins trois d’entre elles se mettent d’accord avant qu’une clé ne soit récupérée. Dans ce cas, lorsque vous stockez le mot de passe crypté à des fins administratives, vous le stockez plusieurs fois, une fois pour chaque ensemble de trois des cinq administrateurs (ce qui ne prend pas beaucoup de place, car vous ne stockez que plusieurs clés , ~ 256 bits chacun, pas de multiples copies des données). Chacune de ces copies est successivement cryptée avec (les hachages de) chacun des mots de passe de ces trois administrateurs.
Pour le déchiffrer, vous devez identifier les trois administrateurs qui entrent leur mot de passe, choisir la clé chiffrée appropriée pour cet ensemble de trois, puis déchiffrer à l'aide de chacun des trois mots de passe pour obtenir finalement la clé d'origine. Vous pouvez ensuite l'utiliser pour récupérer les données elles-mêmes ou simplement les rechiffrer avec le nouveau mot de passe de l'utilisateur afin qu'il puisse toujours accéder à ses données.
Cependant, pour ce faire, vous devez vraiment utiliser un algorithme de cryptage standard et (par forte préférence) une implémentation standard, bien connue et bien étudiée.