Хранение паролей с помощью Python - PullRequest
7 голосов
/ 11 сентября 2010

У меня есть программа, которую я пишу на python, и мне нужно хранить некоторые пароли. Эти пароли будут паролями для FTP-серверов, поэтому важно, чтобы они были не просто видны всем. Это также означает, что я не могу хранить необратимый хэш пароля, как вы это делаете на веб-сервере, потому что я не проверяю, вводит ли кто-нибудь правильный пароль, я просто передаю пароль кому-то еще. * Итак, каков наилучший способ хранения паролей? Я использую Python, и программа будет только для Linux.

Ответы [ 5 ]

5 голосов
/ 11 сентября 2010

Вы можете использовать системный брелок, например, Брелок для ключей GNOME или кошелек KDE.

Существует модуль Python, называемый keyring , который поддерживает несколько поставщиков ключей. Я только попробовал это на Windows, где это еще не работает правильно. Похоже, что разработка не очень активна, но вы должны попробовать. Вы также можете попробовать пакет "python-gnomekeyring", специфичный для GNOME и более низкоуровневый.

2 голосов
/ 11 сентября 2010

Существует удобный и небезопасный способ: просто сохраняйте их в виде открытого текста, и если вы действительно используете FTP (а не, например, SFTP), тогда они будут такими же безопасными, как и машина, на которой они размещены (что означает, что на самом деле не очень безопасно)).FTP был написан в то время, когда отправка незашифрованного пароля по сети считалась «достаточно безопасной»;Те дни прошли.Даже кодирование незашифрованных паролей в исходном коде на Python не очень помогает, поскольку в какой-то момент вы должны их расшифровать.

Безопасные методы требуют чуть больше настройки.Вот достойный учебник , я ожидаю, что есть лучшие.

2 голосов
/ 11 сентября 2010

В зависимости от дистрибутива вы, вероятно, можете сохранить его в цепочке для ключей, если она доступна.

В противном случае взгляните на некоторые из доступных алгоритмов шифрования (PGP / GPG, DES, AES и т. Д.) И их порты / модули Python, но это сложная штука, которую у вас есть , чтобы получить право.

0 голосов
/ 12 сентября 2010

Проверьте netrc в Linux (используйте man или this ), а затем посмотрите этот модуль Python

Если netrc имеет соответствующую информацию, вы можете использовать ftp в командной строке без ввода имени пользователя и пароля - они ищутся в файле. Некоторые вещи, на которые следует обратить внимание: файл ограничен только для чтения / записи пользователем (0600) или может быть отклонен ftp. Если это работает, то вы готовы использовать его из Python.

Гораздо лучшей идеей было бы вообще избежать ftp (когда пароль отправляется в виде простого текста) и использовать sftp. Скопируйте ваш открытый ключ с компьютера, на котором выполняется сценарий Python, на каждый целевой компьютер и позвольте ssh автоматически войти в систему для вас безопасным способом.

0 голосов
/ 11 сентября 2010

Я бы порекомендовал Хешировать пароль как хэш-функцию, это односторонняя функция, поэтому невозможно найти обратную версию пароля в виде простого текста (в отличие от шифрования). MD5 - это алгоритм, который мне нравится и который уже реализован на python.Вы всегда можете добавить соль в хеш, например abdPasswordABDA, где Password - это пароль.Затем сохраните хеш в файле или базе данных и просто снова хешируйте его, прежде чем он будет проверен.SHA1 - это еще один алгоритм хеширования, который вы можете использовать.
Дин

...