2016-12-09 3 views
0

Я изучаю python, поэтому я решил, что попытаюсь создать скрипт, который автоматически отправит мне письма электронной почты Gmail.защита паролей в python

Необходимо отправить логин и пароль в мою учетную запись gmail, чтобы автоматически отправлять мне электронные письма.

Я читал некоторые из руководств здесь, и кажется, что passlib - хороший выбор. Но я все еще немного смущен тем, как настроить его.

  1. Я использую passlib зашифровать свой пароль
  2. Результат будет храниться в скрытом файле в моем Linux VM.
  3. Когда скрипт запускается, он должен разобрать этот скрытый файл на моем vm для пароля hased.
  4. Вот где я в замешательстве, я думаю, мне нужно расшифровать его и перед его отправкой? Разве это не так неуверенно? Или я могу отправить его без расшифровки и, надеюсь, gmail может его расшифровать?

Я использую библиотеку SMTP.

server = smtplib.SMTP('smtp.gmail.com', 587) 
server.ehlo() 
server.starttls() 
server.login(gmail_sender, gmail_passwd) 

Благодаря

+1

Да, это небезопасно. Однако вы шифруете пароль, вы храните его * рядом с кодом для его поиска и дешифрования *. – jonrsharpe

ответ

2

Passlib, вероятно, на самом деле не является правильным выбором здесь. В первую очередь это касается одностороннего хеширования паролей. Вы можете использовать полученный хеш, чтобы проверить, соответствует ли пароль, предоставленный пользователем, вашему хешу, но не расшифровывать хэш. (В версиях Older Passlib был неправильно указан метод .encrypt(), но Passlib 1.7 переименовали его в .hash()).

Вы, вероятно, хотите один из двух, в зависимости от вашего случая использования:

  • keyring является питон интерфейс для сохранения & хранения паролей в ОС под контролем «бумажник». Он работает кросс-платформенный на windows, linux и т. Д.

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

В этом случае вы можете зашифровать учетные данные, которые вы используете для хранения, и выбрать один пароль (предоставляемый во время вызова вашему сценарию, например, из командной строки или env var), чтобы дешифровать эти учетные данные.

  • cryptography - хороший выбор для совершения чего-либо подобного; он предоставляет ряд функций высокого уровня, которые не требуют (слишком много) криптографического опыта, например, их помощников fernet encryption.
+0

Я смотрю второй вариант использования, где скрипт должен запускаться периодически без вмешательства человека. Поэтому, если я использую криптографию, я бы однажды дал ей пароль, чтобы зашифровать и сохранить где-нибудь тогда, когда скрипт выполняет незашифрованный ключ дешифрования? –

1

Вызов STARTTLS() устанавливает вверх/соединение TLS зашифрованного SSL, так что пароль не пересылается в открытом виде. Да, вам нужно будет дешифровать пароль перед отправкой на сервер.login(). В качестве альтернативы вы можете сохранить пароль в переменной окружения и прочитать его на python, который не столь безопасен, но гораздо проще реализовать.

+0

Или в текстовом файле.Все, кроме жесткого кодирования пароля в скрипт :) –