You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何混淆UUID v7的时间戳,同时保留数据库性能?

UUID7 混淆方案可行性探讨

UUID7是一种时间有序UUID,与UUID4相比有以下优势:

  • 作为数据库主键使用时不会降低性能
  • 包含创建时间戳,使得类似created_at的列成为冗余

需要注意的是,当用作外部ID时,UUID7会泄露对象的创建时间。无论这是否真的构成安全风险,我想了解以下方案是否可用于去除时间戳信息(失去时间可排序性),同时保留数据库性能:

  • 生成一个秘密UUID4
  • 插入新对象时,生成一个新的UUID7,并与秘密UUID进行按位异或操作
  • 将结果用作对象的ID(及主键)

Python示例代码

>>> from uuid import uuid4, UUID
>>> from uuid_extensions import uuid7, uuid_to_datetime
    
>>> def obfuscate(u1: UUID, u2: UUID) -> UUID:
        return UUID(bytes=bytes(a ^ b for a, b in zip(u1.bytes, u2.bytes)))

>>> secret = uuid4()
>>> u1 = uuid7()
>>> u2 = uuid7()
>>> id1 = obfuscate(u1, secret)
>>> id2 = obfuscate(u2, secret)

>>> print(f'\n secret= {secret}\n u1 = {u1} --> id1 = {id1}\n u2 = {u2} --> id2 = {id2}')

 secret = 1bc9e84c-c8d6-47c0-afd3-b78a4333f4bc
 u1 = 06732e7b-9aad-7e72-8000-6978adc183a5 --> id1 = 1dbac637-527b-39b2-2fd3-def2eef27719
 u2 = 06732473-1b2b-7d9a-8000-f7261455e941 --> id2 = 1dbacc3f-d3fd-3a5a-2fd3-40ac57661dfd

>>> uuid_to_datetime(u1)
datetime.datetime(2024, 11, 12, 5, 29, 29, 667457, tzinfo=datetime.timezone.utc)

>>> uuid_to_datetime(id1) is None
True

内容的提问来源于stack exchange,提问作者bavaza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 09:41:18