Перш за все, я погоджуюся з іншими відповідями, вказуючи, що набагато безпечніше просто уникати цього, а зберігати лише хеші паролів, а не самі паролі чи все, що можна перетворити назад у пароль.
Однак бувають випадки, коли вам потрібно більш-менш дозволити відновлення. Що стосується паролів, ви, як правило, хочете відновити, просто дозволивши адміністратору змінити пароль, коли / якщо потрібно, а не відновити існуючий пароль.
Ще одна можливість полягає в тому, що ви дозволяєте користувачеві зберігати дані на сервері, зашифрованому власним паролем. В цьому випадку, просто дозволяючи адміністратору змінити пароль є НЕ достатнім. Новий пароль не допоможе розшифрувати дані, і більшість користувачів вважають неприйнятним, щоб усі їх зашифровані дані стали недоступними, коли / якщо вони забудуть / втратять пароль. У цій ситуації існує альтернатива, яка є достатньо безпечною і все ще дозволяє відновити, коли це дійсно потрібно.
Замість використання пароля користувача для шифрування даних ви створюєте випадковий ключ для шифрування самих даних. Потім ви зберігаєте цей ключ у декількох місцях: один раз зашифрований паролем користувача, а в іншому місці зашифрований паролем адміністратора. Тоді, коли (не дуже, якщо) користувач втрачає свій пароль і більше не може отримати доступ до даних безпосередньо, ви можете використовувати пароль адміністратора для розшифрування реального ключа і використовувати його для відновлення даних та / або повторного шифрування ключа за допомогою новий пароль користувача.
Якщо ви не хочете повністю довіряти одному адміністратору, ви також можете ним керувати. Наприклад, ви можете вирішити, що 5 людей матимуть ключі адміністратора, і ви хочете, щоб принаймні троє з них погодилися, перш ніж ключ можна буде відновити. У цьому випадку, коли ви зберігаєте зашифрований пароль в адміністративних цілях, ви зберігаєте його кілька разів, один раз на кожен набір з трьох з п'яти адміністраторів (що не займає багато місця, оскільки ви зберігаєте лише кілька ключів , при ~ 256 біт за штуку, а не декілька копій даних). Кожна з цих копій послідовно шифрується з (хешами) кожного з паролів для цих трьох адміністраторів.
Щоб розшифрувати його, вам потрібно визначити трьох адміністраторів, які вводять свої паролі, і вибрати відповідний зашифрований ключ для цього набору з трьох, а потім розшифрувати, використовуючи кожен із трьох паролів, щоб нарешті отримати оригінальний ключ. Потім ви можете використовувати це для відновлення самих даних, або можете просто зашифрувати їх новим паролем (хеш) користувача, щоб вони все ще могли отримати доступ до своїх даних.
Коли ви це зробите, вам дійсно потрібно використовувати стандартний алгоритм шифрування та (за великим уподобанням) стандартний, добре відомий, ретельно вивчений його виконання.