为 Python 中的 API 个令牌生成 UUID

Generating UUID for API tokens in Python

我目前正在 Python 中生成 UUID,如下所示:

import uuid
import secrets

uuid.UUID(bytes=secrets.token_bytes(16))

用作 API 令牌或访问令牌安全吗?

您当前的方法可以说是安全可靠的方法有两个原因:

  • 生成具有 128 位熵的重复 ID 的概率是 effectively nil。 (这是您正在使用的标准 UUID 大小。)
  • secrets 是专门为生成加密强随机数而设计的; token_bytes() 实际上只是对 os.urandom() 的调用,后者又是来自 OS 特定随机源的 returns 个随机字节。*

一个建议 - uuid.uui4() 基本上做同样的事情而没有调用中间函数的开销:

# https://github.com/python/cpython/blob/3.5/Lib/uuid.py
def uuid4():
    """Generate a random UUID."""
    return UUID(bytes=os.urandom(16), version=4)

另一个建议 - 您可以使用生成的 UUID 对象的 .hex 来获得一个不错的非连字符字符串。

>>> uuid.uuid4().hex
'22c482ef3cd84c26bb49c0287828428f'

*在 Unix 上,即 /dev/urandom,它从设备驱动程序等来源收集信息。 IE。生成机器特有的乱码信息,但足够随机且无法识别主机本身。