Задавая этот вопрос, вы в основном говорите всем, что дизайн вашей системы несовершенен.
Если вы сохраните пароль, есть два варианта использования:
- Возможность сравнить введенный пароль с сохраненным
- Использование сохраненного пароля для чего-либо (т. Е. Приложению необходимо получить его в виде открытого текста)
Для случая 1 просто сохраните соленый хеш. Это безопасно, и даже если кто-то получит доступ к хешу, он не сможет ничего с этим сделать. Достаточно защитить его с помощью стандартных разрешений файловой системы UNIX - chmod 600 и другие пользователи (кроме root) не могут получить доступ к файлу.
Для случая 2 шифрование не имеет особого смысла. Ваше приложение должно иметь возможность дешифровать его, так что оно дает пользователям, которые смотрят на файл, ложное чувство безопасности (если ваше приложение может расшифровать его, каждый может). Использование разрешений файловой системы обычно достаточно безопасно.
Теперь вы можете сказать, что даже root не сможет получить доступ к паролю - действительный аргумент в многопользовательской системе. Однако root в любом случае может изменить / заменить вашу программу - так что это снова будет ложное чувство безопасности. В любом случае, в этом случае вы можете зашифровать его вторым паролем, который пользователь должен вводить каждый раз, когда пароль должен быть прочитан или записан. Тогда у вас будет что-то похожее на браузер менеджера паролей, где сохраненные пароли защищены мастер-паролем.