У других была правильная идея, но они упустили важный шаг.Вы должны использовать асимметричное шифрование и хранить зашифрованную форму с открытым ключом для пароля + соли.
Чтобы проверить пароль, возьмите предложенный пароль, объедините его с солью, используйте открытый ключ для шифрования комбинации,и сравните его с сохраненным значением.
Чтобы получить пароль, используйте закрытый ключ (защищенный, то есть на другом изолированном компьютере), чтобы расшифровать пароль + соль и выбросить соль.
Минусы: асимметричное шифрование может быть дорогим в вычислительном отношении, но пароли, как правило, короткие.
Вы могли бы объединить это с другими идеями выше (то есть также сохранить соленый хеш), и вы должны дополнить пароль так, чтобы длина зашифрованного текста не вытекла из длины пароля.