In Python sind keine per se integrierten Verschlüsselungsalgorithmen integriert. Vielleicht möchten Sie jedoch die Python Cryptography Toolkit (PyCrypt) betrachten. Ich habe nur daran herumgebastelt, aber es ist in Pythons Dokumentation auf cryptographic services verwiesen. Hier ist ein Beispiel dafür, wie man einen String mit AES PyCrypt verschlüsseln könnte:
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, einfach den Prozess umkehren; unter der Annahme, dass encryption_obj
wie oben erstellt wird, und dass Sie den entsprechenden Teil der URL abgerufen hat, dies 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 die primäre Hash Schlüssel (mit einem Salz, wenn Sie wünschen) und speichern Sie die Hash-und PK in Ihrer Datenbank. Geben Sie dem Benutzer den Hash als Teil seiner Verknüpfung, und wenn sie zurückkommen und den Hash darstellen, suchen Sie den entsprechenden PK und geben Sie das entsprechende Objekt zurück. (. Wenn Sie diesen Weg gehen wollen, besuchen Sie das integrierte Bibliothek hashlib)
Als Beispiel, würden Sie so etwas wie dies in models.py definiert haben:
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 Sie‘ d erzeugen, um den Hash in einer Ansicht mit so etwas wie folgt aus:
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 würde diese Version als auch zu zitieren; Wenn Sie möchten, können Sie hexdigest()
anstelle von digest
verwenden (Sie müssten die resultierende Zeichenfolge nicht zitieren), aber Sie müssen die Länge des Feldes auf 64 anpassen.
Warum Sie nicht nur verwenden, um den' session' für diesen ? – voyager
Ich denke, du meinst Benutzerauth prüfen, ja ich werde sie in der Tat Benutzer aber auch ich will auch nicht Artikel pks zu den Benutzern zeigen und stattdessen crypt sie. – Hellnar