Heim > Datenbank > MySQL-Tutorial > Wie kann ich den Primärschlüssel von Django mithilfe eindeutiger Ganzzahlbezeichner sicher verschleiern?

Wie kann ich den Primärschlüssel von Django mithilfe eindeutiger Ganzzahlbezeichner sicher verschleiern?

Barbara Streisand
Freigeben: 2024-11-24 17:13:12
Original
234 Leute haben es durchsucht

How Can I Securely Obfuscate Django's Primary Key Using Unique Integer Identifiers?

Djangos Primärschlüssel mit eindeutigen Ganzzahlbezeichnern verschleiern

In Django ist der Primärschlüssel normalerweise eine automatisch inkrementierte Ganzzahl, die als eindeutig dient Bezeichner für jede Zeile in einer Tabelle. Allerdings kann die Offenlegung dieses Schlüssels in URLs oder anderen öffentlich zugänglichen Kontexten den Datenschutz und die Sicherheit gefährden. In diesem Artikel wird ein alternativer Ansatz zur Verschleierung des Primärschlüssels unter Beibehaltung seiner Einzigartigkeit untersucht.

Anforderungen

  • Der Feldtyp „Primärschlüssel“ sollte „Ganzzahl“ bleiben.
  • Keine Hash-/Unhash-Vorgänge während des Lesens/Schreibens/Vergleichs.
  • Unumkehrbar Hashing-/Verschlüsselungsfunktion.
  • Eindeutige Werte nur innerhalb jeder Tabelle.
  • Präzise Hash-Werte für kürzere URLs.

Ansatz

Um diesen Anforderungen gerecht zu werden, wird eine Lösung vorgeschlagen, die dem ID-Generierungssystem von Instagram ähnelt. Bei diesem Ansatz werden eindeutige IDs generiert, die aus einer zeitbasierten Komponente und einer Zufallskomponente bestehen.

Funktion zur ID-Generierung

import time
import random

START_TIME = int(time.time() * 1000)  # Some constant timestamp

def make_id():

    t = int(time.time() * 1000) - START_TIME
    u = random.SystemRandom().getrandbits(23)
    id = (t << 23) | u

    return id

def reverse_id(id):

    t = id >> 23
    return t + START_TIME
Nach dem Login kopieren

Die Funktion make_id generiert eindeutige IDs mithilfe von eine zeitbasierte 41-Bit-Komponente und eine 23-Bit-Zufallskomponente. Die Funktion „reverse_id“ ermöglicht das Extrahieren des Zeitstempels aus der generierten ID.

Modell

from django.db import models

class MyClass(models.Model):

    id = models.BigIntegerField(default=make_id, primary_key=True)
Nach dem Login kopieren

Durch Verwendung der Funktion „make_id“ als Standardwert für das Feld „id“, neu Datensätzen werden beim Einfügen eindeutige IDs zugewiesen. Dieser Ansatz stellt sicher, dass das Feld „Primärschlüssel“ seinen ganzzahligen Datentyp beibehält, während seine sequentielle Natur verschleiert wird. Darüber hinaus verhindert die Zufallskomponente der ID Kollisionen auch bei gleichzeitigen Einfügungen.

Verwendung

Mit dieser Implementierung sind die Primärschlüsselwerte eindeutige Ganzzahlen, die präzise und prägnant sind beständig gegen Einwirkungen unter Beibehaltung ihrer primären Schlüsselfunktionalität.

Das obige ist der detaillierte Inhalt vonWie kann ich den Primärschlüssel von Django mithilfe eindeutiger Ganzzahlbezeichner sicher verschleiern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage