Python 使用Integer PrimaryKey+;散列或使用不带散列的机密模块

Python 使用Integer PrimaryKey+;散列或使用不带散列的机密模块,python,python-3.x,django,database,Python,Python 3.x,Django,Database,我正在尝试创建一个需要一些敏感数据的应用程序。现在在我的数据库中,我正在使用python secrets模块为每个对象创建一个安全的16字节十六进制令牌。然而,通过这样做,我将无法散列它,因为它不再是整数。因此,我想知道如果我使用机密模块,将id公开给最终用户是否足够安全 例如,我的数据库中有一个表的字段: id=secrets.token\u hex(16) 例如,它将返回id=cf125cf14d4ae9ed8972ee7512755e6d 或者我应该坚持使用常规的数据库主键,即自动递增的整

我正在尝试创建一个需要一些敏感数据的应用程序。现在在我的数据库中,我正在使用python secrets模块为每个对象创建一个安全的16字节十六进制令牌。然而,通过这样做,我将无法散列它,因为它不再是整数。因此,我想知道如果我使用
机密
模块,将id公开给最终用户是否足够安全

例如,我的数据库中有一个表的字段:

id=secrets.token\u hex(16)
例如,它将返回
id=cf125cf14d4ae9ed8972ee7512755e6d


或者我应该坚持使用常规的数据库主键,即自动递增的整数,然后使用散列库来显示散列值,然后在需要时对其进行解码?

我喜欢使用UUID作为所有实体的主键

import uuid
from django.db import models

class SomeModel(models.Model):

    id = models.UUIDField(
        default = uuid.uuid4,
        editable = False,
        primary_key = True,
    )

安全是相对的。你在防范什么样的威胁?一旦确定存在哪些威胁,就可以确定保护数据的最佳方法。这是为了跟踪私人聊天室。因此,在URL中,用户将看到聊天室的id,这就是我要保护的内容。