Obfuscate Strings in Python

Ich habe eine Passwort-String, die an eine Methode übergeben werden muss. Alles funktioniert gut, aber ich fühle mich nicht wohl, das Passwort im Klartext zu speichern. Gibt es eine Möglichkeit, die Saite zu verschleiern oder wirklich zu verschlüsseln? Ich bin mir bewusst, dass Obfuscation umgekehrt sein kann, aber ich denke, ich sollte zumindest versuchen, das Passwort ein bisschen zu vertuschen. Zumindest wird es nicht sichtbar für ein Indizierungsprogramm oder ein streunendes Auge, das einen kurzen Blick auf meinen Code gibt.

Ich bin mir bewusst von pyobfuscate aber ich möchte nicht das ganze Programm verschleiert, nur ein String und möglicherweise die ganze Zeile selbst, wo die Variable definiert ist.

Zielplattform ist GNU Linux Generic (Wenn das einen Unterschied macht)

6 Solutions collect form web for “Obfuscate Strings in Python”

Wenn du nur beiläufig auf ein Passwort hinweisen willst, kannst du das Codierung / Decodieren des Passworts auf / von base64 berücksichtigen. Es ist nicht sicher im geringsten, aber das Passwort wird nicht beiläufig Mensch / Roboter lesbar sein.

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

Offensichtlich ist Ihre beste Option, diese an einen Dritten zu delegieren. Wenn Sie sich mit dem, was Sie mit einer anderen Berechtigung verbinden, authentifizieren können (zB das Benutzerkonto, das Ihr Prozess ausgeführt wird), können Sie die Berechtigungsstufen bis zur OS-Ebene verlassen. Alternativ, wenn genügend wichtig / möglich, könnten Sie den Benutzer (Speicherung der Schlüssel in der (wohl) etwas weniger hackable Nassware statt)

Wenn du ein Passwort oder einen Schlüssel speichern musst, würde ich dir empfehlen, es von deinem Code getrennt zu speichern, in einer Datei, die du eingelesen hast, und de-obfusticate, wenn nötig. Das hat die Vorteile:

  • Sie können die Dateiberechtigungen auf die Datei so fest wie möglich einstellen (dh nur lesbar durch das Konto, das Ihr Programm läuft), im Gegensatz zu dem Rest Ihres Programms, das von mehr Personen gelesen werden kann.

  • Sie werden es nicht versehentlich in Ihr Versionskontrollsystem überprüfen!

  • Keine Notwendigkeit, auf druckbare Zeichen (oder verwenden Sie ungünstige Escaping) für eine Python-String beschränkt werden, so können Sie eine beliebige Keyfile, wenn möglich, anstatt ein menschliches lesbares Passwort verwenden. Wenn es nicht menschlich eingegeben ist, gibt es keinen Grund, alle Schwächen von Passwörtern zu haben.

Um zu fühlen, können Sie base64 wie vorgeschlagen, oder einige Home-Brew-Schema wie XORing oder Entschlüsselung mit einem anderen Schlüssel an anderer Stelle gespeichert, erfordert beide Standorte betrachtet werden. Seien Sie sich bewusst, dass dies nicht gegen etwas über opportunistische Schulter-Surfen zu schützen (wenn das) – stellen Sie sicher, dass es einige Ebene der realen Sicherheit als auch (einschließlich offensichtliche wie physischen Zugang zu der Maschine!)

Sie sollten vermeiden, das Passwort in der ersten Stelle zu speichern. Das ist die einzige "wahre" Lösung.

Jetzt können Sie das Passwort einfach mit dem Hash-Modul (md5 und ähnliche Module in Python 2.5 und unten) verschlüsseln.

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

Viele passwortübergreifende Protokolle und Einrichtungen haben eine Möglichkeit, eine Keyfile anstelle eines Passworts anzugeben. Diese Strategie wird wahrscheinlich hier arbeiten Anstatt Hard-Coding ein Passwort, Hard-Code ein Dateiname (oder besser noch, machen Sie es einen Parameter!). Sie könnten sogar so weit gehen wie SSH und verweigern, Keyfiles zu laden, die nicht (1) im Besitz des aktuellen Benutzers (2) sind, der nur von diesem Benutzer lesbar ist.

Es hängt viel davon ab, warum du das Passwort beibehältest und wo du fühlst, dass es ein Sicherheitsproblem gibt.

Wenn Sie dieses Passwort in einer Datenbank speichern oder übereinstimmen,

Dies sollte nicht wirklich ein Problem sein, aber wenn Sie betroffen sind, verwenden Sie die Kennwortverschlüsselung Ihrer Datenbank frühzeitig und speichern Sie das (SELECT PASSWORD ('mySamplePassword');) und vergleichen Sie dann die verschlüsselte Version direkt in Ihrer späteren Abfrage.

Wenn Sie es für spätere Transmision sparen:

Es gibt wirklich nicht viel, was du tun kannst. Die Übertragung selbst ist sehr wahrscheinlich einfacher zu schnüffeln als Ihre Handhabung des Passworts.

Ohne zu wissen, ein paar weitere Details von dem, was du tust, ist dies eine Art von schwer zu beantworten.

Die Basis64 Antwort ist gut für die Verschleierung des Passworts und wird mit keinem Benutzer Intervention auf Kosten von unsicher zu arbeiten. Wenn der Benutzer mit dem Zugriff auf einen Systemschlüssel-Service angemeldet werden kann, werfen Sie einen Blick auf das Keyring- Paket. Ich habe es benutzt, um Passwörter auf OS X- und Linux-Systemen zu speichern.

  • Verschlüsseln und Entschlüsseln mit PyCrypto AES 256
  • Python-Implementierung von sha512_crypt.c
  • Nodejs crypto vs python hashlib
  • Wie man eine Datei mit Python verschlüsselt, aber mit der Shell entschlüsselt werden kann?
  • Python File Encryption
  • Entschlüsseln Sie eine AES-verschlüsselte Nachricht (verschlüsselt in Python) in Java
  • Entschlüsseln einer Datei in einen Stream und Lesen des Streams in Pandas (hdf oder stata)
  • Python oder LibreOffice Save xlsx Datei mit Passwort verschlüsselt
  • ASCII Vigenere Chiffre nicht entschlüsseln
  • Vigenere Chiffre - nicht korrekte Werte hinzufügen
  • Python-Code, der RSA verschlüsselte Datei in Chunks von 64 Bit unter Verwendung eines privaten Exponenten und Moduls entschlüsselt
  • Python ist die beste Programmiersprache der Welt.