首页  >  文章  >  数据库  >  如何使用唯一整数标识符安全地混淆 Django 的主键?

如何使用唯一整数标识符安全地混淆 Django 的主键?

Barbara Streisand
Barbara Streisand原创
2024-11-24 17:13:12231浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn