Wie kodiert und decodiert man einen String mit Python für die Verwendung in einer URL?

Ich habe einen String wie folgt:

String A: [ 12234_1_Hello'World_34433_22acb_4554344_accCC44 ] 

Ich möchte String A verschlüsseln, um in einer sauberen URL verwendet zu werden. etwas wie das:

 String B: [ cYdfkeYss4543423sdfHsaaZ ] 

Gibt es eine Codierung API in Python, gegeben String A, gibt es String B? Gibt es eine Decodierung API in Python, gegeben String B, gibt es String A?

8 Solutions collect form web for “Wie kodiert und decodiert man einen String mit Python für die Verwendung in einer URL?”

Eine Möglichkeit, die Codierung / Decodierung zu machen, besteht darin, das Paket base64 zu verwenden, für ein Beispiel:

 import base64 import sys encoded = base64.b64encode(sys.stdin.read()) print encoded decoded = base64.b64decode(encoded) print decoded 

Ist es das, was du gesucht hast? Mit Ihrem speziellen Fall erhalten Sie:

Eingabe: 12234_1_Hello'World_34433_22acb_4554344_accCC44

Codiert: MTIyMzRfMV9IZWxsbydXb3JsZF8zNDQzM18yMmFjYl80NTU0MzQ0X2FjY0NDNDQ =

Decodiert: 12234_1_Hello'World_34433_22acb_4554344_accCC44

Beachten Sie, dass theres ein großer Unterschied zwischen Codierung und Verschlüsselung ist.

Wenn Sie sensible Daten senden wollen, dann verwenden Sie nicht die oben genannte Codierung;)

Sind Sie nach Verschlüsselung, Komprimierung oder einfach urlencoding? Der String kann nach urlencoding übergeben werden, aber das macht es nicht kleiner wie in deinem Beispiel. Kompression könnte es schrumpfen, aber du musst das Ergebnis nochmals uralten.

Muss man eigentlich die String-Daten aus dem Viewer ausblenden (zB sensible Daten, sollte man nicht von jemandem sehen, der die URL über die Schulter liest)?

Um es wirklich kurz zu machen -> einfach eine Zeile in die Datenbank einfügen. Speichern Sie etwas wie eine Liste von (id auto_increment, url) Tupel. Dann können Sie base64 codieren die ID, um eine "Proxy-URL" zu bekommen. Decodiere es, indem du die ID dekodierst und die richtige URL in der Datenbank nachschreibst. Oder wenn es Ihnen nichts ausmacht, die Identifikatoren, die sequenziell aussehen, verwenden Sie einfach die Zahlen.

Bist du versucht, die Zeichenfolge zu verschlüsseln oder zu verschlüsseln, um illegale Zeichen für URLs zu entfernen? Wenn das letztere, können Sie urllib.quote :

 >>> quoted = urllib.quote("12234_1_Hello'World_34433_22acb_4554344_accCC44") >>> quoted '12234_1_Hello%27World_34433_22acb_4554344_accCC44' >>> urllib.unquote(quoted) "12234_1_Hello'World_34433_22acb_4554344_accCC44" 

Das base64-Modul bietet Codierung und Decodierung für einen String zu und von verschiedenen Basen, seit python 2.4.

In einem Beispiel würden Sie folgendes tun:

 import base64 string_b = base64.b64encode(string_a) string_a = base64.b64decode(string_b) 

Für vollständige API: http://docs.python.org/library/base64.html

Es ist schwer, die Größe eines Strings zu reduzieren und willkürlichen Inhalt zu bewahren.

Sie müssen die Daten auf etwas beschränken, das Sie sinnvoll komprimieren können.

Ihre Alternative ist, das folgende zu tun.

  1. Speichern Sie "alle Argumente in der URL" in einer Datenbankzeile.

  2. Zuordnen eines GUID-Schlüssels zu dieser Sammlung von Argumenten.

  3. Dann geben Sie diese verkürzte GUID-Taste.

Eine andere Methode, die auch die Saite verkürzen würde, wäre, den md5 / sha1-Hash der Saite zu berechnen (verkettet mit einem Samen, wenn man es wünschte):

 import hashlib >>> hashlib.sha1("12234_1_Hello'World_34433_22acb_4554344_accCC44").hexdigest() 'e1153227558aadc00a2e90b5013fdd6b0804fdfb' 

In der Theorie sollten Sie eine Reihe von Saiten mit sehr wenigen Kollisionen und mit einer festen Länge zu bekommen. Die hashlib Bibliothek verfügt über eine Reihe von verschiedenen Hash-Funktionen, die Sie auf diese Weise mit unterschiedlichen Ausgabegrößen verwenden können.

Edit: Du hast auch gesagt, dass du einen reversiblen String brauchst, also würde das nicht dafür arbeiten. Afaik, aber viele Web-Plattformen, die saubere URLs wie Sie scheinen zu implementieren verwenden Hash-Funktionen, um eine verkürzte URL zu berechnen und dann speichern Sie diese URL zusammen mit den Seite der anderen Daten, um die Reverse-Lookup-Fähigkeit bieten.

Python ist die beste Programmiersprache der Welt.