Обфускация строк в Python

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

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

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

  • живое обновление с помощью matplotlib
  • PyQt соединяется внутри для цикла и отдельных вызовов, приводит к разному поведению
  • Разница между asfreq и resample
  • Вложенные инструкции if-else Python
  • OpenCV для Python 3.x под Windows
  • Как эти строки представлены внутри интерпретатора Python? Я не понимаю
  • Наследование методов docstrings в Python
  • Как я могу правильно установить `env.hosts` в функции в моей Python Fabric` fabfile.py`?
  • 6 Solutions collect form web for “Обфускация строк в Python”

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

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

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

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

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

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

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

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

    В первую очередь следует избегать сохранения пароля. Это единственное «истинное» решение.

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

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

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

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

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

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

    Если вы сохраните его для последующей передачи:

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

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

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

    Python - лучший язык программирования в мире.