Django, python und link verschlüsselung

Ich muss irgendeine Art von encrpytion für die Erstellung von benutzerspezifischen Links zu arrangieren. Benutzer werden auf diesen Link klicken und bei einer anderen Ansicht wird der verknüpfte Link mit dem verschlüsselten String entschlüsselt und das Ergebnis wird zurückgegeben.

Dazu brauche ich eine Art Verschlüsselungsfunktion, die eine Zahl (oder einen String) verbraucht, die der Primärschlüssel meines ausgewählten Elements ist, das an das Benutzerkonto gebunden ist und auch irgendeine Art von Saatgut verbraucht und einen Verschlüsselungscode erzeugt, der entschlüsselt wird Auf einer anderen Seite.

So etwas wie das

my_items_pk = 36 #primary key of an item seed = "rsdjk324j23423j4j2" #some string for crypting encrypted_string = encrypt(my_items_pk,seed) #generates some crypted string such as "dsaj2j213jasas452k41k" and at another page: decrypt_input = encrypt(decypt,seed) print decrypt_input #gives 36 

Ich möchte, dass mein "Samen" eine Art Primärvariable (nicht eine Klasse) für diesen Zweck ist (dh eine Anzahl oder String).

Wie kann ich das unter Python und Django erreichen?

2 Solutions collect form web for “Django, python und link verschlüsselung”

Es gibt keine Verschlüsselungsalgorithmen an sich, die in Python eingebaut sind. Allerdings möchten Sie vielleicht das Python Cryptography Toolkit (PyCrypt) anschauen. Ich habe nur mit ihm gebastelt, aber es wird in Pythons Dokumentation über kryptografische Dienste referenziert. Hier ist ein Beispiel dafür, wie du einen String mit AES mit PyCrypt verschlüsseln kannst:

 from Crypto.Cipher import AES from urllib import quote # Note that for AES the key length must be either 16, 24, or 32 bytes encryption_obj = AES.new('abcdefghijklmnop') plain = "Testing" # The plaintext must be a multiple of 16 bytes (for AES), so here we pad it # with spaces if necessary. mismatch = len(plain) % 16 if mismatch != 0: padding = (16 - mismatch) * ' ' plain += padding ciph = encryption_obj.encrypt(plain) # Finally, to make the encrypted string safe to use in a URL we quote it quoted_ciph = quote(ciph) 

Sie würden dann diesen Teil Ihrer URL machen, vielleicht als Teil einer GET-Anfrage.

Um zu entschlüsseln, umgekehrt den Prozess; Vorausgesetzt, dass encryption_obj wie oben erstellt wird und dass du den relevanten Teil der URL abgerufen hast, das würde es tun:

 from urllib import unquote # We've already created encryption_object as shown above ciph = unquote(quoted_ciph) plain = encryption_obj.decrypt(ciph) 

Sie könnten auch einen anderen Ansatz betrachten: Eine einfache Methode wäre, den Primärschlüssel (mit einem Salz, wenn Sie es wünschen) zu hacken und den Hash und PK in Ihrer Datenbank zu speichern. Geben Sie dem Benutzer den Hash als Teil ihres Links, und wenn sie zurückkehren und den Hash vorstellen, schauen Sie den entsprechenden pk und geben Sie das entsprechende Objekt zurück. (Wenn du diese Route gehen möchtest, schau dir die eingebaute Bibliothek hashlib an .)

Als Beispiel hättest du so etwas wie das in model.py:

 class Pk_lookup(models.Model): # since we're using sha256, set the max_length of this field to 32 hashed_pk = models.CharField(primary_key=True, max_length=32) key = models.IntegerField() 

Und du würdest den Hash in einer Ansicht mit so etwas wie folgend erzeugen:

 import hashlib import Pk_lookup hash = hashlib.sha256() hash.update(str(pk)) # pk has been defined previously pk_digest = hash.digest() lookup = Pk_lookup(hashed_pk=pk_digest,key=pk) lookup.save() 

Beachten Sie, dass Sie diese Version auch zitieren müssen. Wenn du es hexdigest() , kannst du hexdigest() anstelle von digest (du musst den resultierenden String nicht zitieren), aber du musst die Länge des Feldes auf 64 einstellen.

Django hat jetzt Features. Siehe https://docs.djangoproject.com/de/dev/topics/signing/

Zitat dieser Seite:

"Django bietet sowohl eine Low-Level-API für die Signierung von Werten als auch eine hochrangige API zum Einstellen und Lesen von signierten Cookies, einer der häufigsten Verwendungen für die Anmeldung in Webanwendungen.

Sie können auch die Unterschrift für Folgendes finden:

  • Erzeugen von "Recover my Account" URLs für das Senden an Benutzer, die ihr Passwort verloren haben.
  • Sicherstellen, dass Daten, die in versteckten Formularfeldern gespeichert sind, nicht manipuliert wurden.
  • Erstellen von einmaligen geheimen URLs für den temporären Zugriff auf eine geschützte Ressource, zum Beispiel eine herunterladbare Datei, die ein Benutzer bezahlt hat. "
  • Wie kann ich bcrypt / scrypt auf appengine für Python verwenden?
  • ASCII Vigenere Chiffre nicht entschlüsseln
  • Welcher symmetrische Cypher für die Verschlüsselung von Nachrichten?
  • Python-Code, der RSA verschlüsselte Datei in Chunks von 64 Bit unter Verwendung eines privaten Exponenten und Moduls entschlüsselt
  • Xor Verschlüsselung / Entschlüsselung einer Datei mit Python 3
  • Entschlüsseln von Daten in Python, die in Java von Java verschlüsselt wurden
  • Warum ist AES verschlüsselte Chiffre der gleichen Saite mit der gleichen Taste immer anders?
  • AES Entschlüsselung fehlschlägt beim Entschlüsseln eines zweiten Mal
  • Versuchen, RSA-Signatur mit Python aus C-Code zu erzeugen
  • Python File Encryption
  • Nodejs crypto vs python hashlib
  • Python ist die beste Programmiersprache der Welt.