Скрыть строки в Python

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

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

целевая платформа - GNU Linux Generic (если это имеет значение)

6 ответов


Если вы просто хотите предотвратить случайный взгляд на пароль, вы можете рассмотреть возможность кодирования/декодирования пароля в/из в base64. Это не безопасно, по крайней мере, но пароль не будет случайно читаемым человеком/роботом.

import base64
# Encode password
encoded_pw = base64.b64encode(raw_pw)

# Decode password
decoded_pw = base64.b64decode(encoded_pw)

очевидно, что ваш лучший вариант-делегировать это третьей стороне. Если вы можете аутентифицироваться с тем, к чему вы подключаетесь, используя некоторые другие учетные данные (например. учетная запись пользователя ваш процесс работает как), вы можете оставить уровни разрешений до уровня ОС. В качестве альтернативы, если достаточно важно / возможно, вы можете запросить пользователя (сохраняя ключ в (возможно) немного менее взломанном wetware вместо этого)

Если вы do нужно сохранить некоторый пароль или ключ, я бы рекомендовал вам хранить его отдельно из вашего кода, в файле, который Вы читаете, и де-obfusticate, если это необходимо. Это имеет преимущества, которые:

  • вы можете установить права доступа к файлу как можно плотнее (т. е. только читаемый учетной записью ваша программа работает как), в отличие от остальной части вашей программы, которая может быть прочитана большим количеством людей.

  • вы случайно не проверите его в свой контроль версий система!

  • нет необходимости ограничиваться печатными символами (или использовать неудобное экранирование) для строки python, поэтому вы можете использовать произвольный файл ключей, если это возможно, а не читаемый человеком пароль. Если это не человек-вошел, нет никаких причин, чтобы все слабые пароли.

чтобы запутать, вы можете использовать base64, как предложено, или некоторую схему домашнего приготовления, такую как XORing или дешифрование с другим ключом, хранящимся в другом месте, требуя обоих места, на которые нужно посмотреть. Имейте в виду, что это не защищает ни от чего, кроме оппортунистического плечевого серфинга (если это) - убедитесь, что есть некоторый уровень реальные безопасности (в том числе и очевидные, такие как физический доступ к машине!)


вы должны избегать хранения пароля в clear в первую очередь. Это единственное "верное" решение.

теперь вы можете легко зашифровать пароль с помощью хэш-модуля (md5 и аналогичных модулей в python 2.5 и ниже).

import hashlib
mypass = "yo"
a = hashlib.sha256(mypass).digest()

многие протоколы и средства, принимающие пароль, имеют возможность указать файл ключа, а не пароль. Эта стратегия, вероятно, будет работать здесь; вместо жесткого кодирования пароля, жесткий код имени файла (или еще лучше, сделайте его параметром!). Вы даже можете зайти так далеко, как SSH, и отказаться загружать файлы ключей, которые не принадлежат (1) текущему пользователю (2), только читаемые этим пользователем.


Это зависит от того, почему вы держите пароль вокруг, и где вы чувствуете, что есть проблема безопасности.

Если вы сохраняете или сопоставляете этот пароль с базой данных в будущем:

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

Если вы сохраняете его на потом передача:

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

Не зная еще нескольких деталей того, что вы делаете, на это трудно ответить.


ответ base64 хорош для запутывания пароля и будет работать без вмешательства пользователя ценой небезопасности. Если пользователь может войти в систему с доступом к службе связывания ключей системы, взгляните на брелок пакета. Я использовал его для хранения паролей в системах OS X и Linux.