首頁 > 資料庫 > mysql教程 > 如何使用唯一整數識別碼安全地混淆 Django 的主鍵?

如何使用唯一整數識別碼安全地混淆 Django 的主鍵?

Barbara Streisand
發布: 2024-11-24 17:13:12
原創
235 人瀏覽過

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

使用唯一整數標識符來模糊Django 的主鍵

在Django 中,主鍵通常是一個自動遞增的整數,用作唯一的表中每一行的識別符。但是,在 URL 或其他面向公眾的上下文中公開此金鑰可能會損害隱私和安全。本文探討了一種在保持其獨特性的同時混淆主鍵的替代方法。

要求

  • 主鍵欄位類型應保留整數。
  • 期間沒有雜湊/取消雜湊操作讀取/寫入/比較。
  • 不可逆的雜湊/加密功能。
  • 僅每個表中的唯一值。
  • 更短的簡潔雜湊值URL。

方法

為了滿足這些要求,提出了類似於 Instagram 的 ID 生成系統的解決方案。此方法涉及產生由基於時間的組件和隨機組件組成的唯一 ID。

ID 產生函數

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
登入後複製

make_id 函數使用下列指令產生唯一 ID 41 位元基於時間的分量和 23 位元隨機分量。 verse_id 函數允許從產生的 ID 中提取時間戳記。

模型

from django.db import models

class MyClass(models.Model):

    id = models.BigIntegerField(default=make_id, primary_key=True)
登入後複製

透過使用 make_id 函數作為 id 欄位的預設值,插入時新記錄將被指派唯一的 ID。此方法可確保主鍵欄位保留其整數資料類型,同時模糊其順序性質。此外,即使在同時插入期間,ID 的隨機部分也可以防止衝突。

用法

透過此實現,主鍵值將是簡潔且唯一的整數。耐暴露,同時保持其主要關鍵功能。

以上是如何使用唯一整數識別碼安全地混淆 Django 的主鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板