为 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。生成机器特有的乱码信息,但足够随机且无法识别主机本身。
我目前正在 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。生成机器特有的乱码信息,但足够随机且无法识别主机本身。