我目前在Python中生成UUID的代码如下:
import uuid
import secrets
uuid.UUID(bytes=secrets.token_bytes(16))
这个能安全地用作 API 令牌或访问令牌吗?
我目前在Python中生成UUID的代码如下:
import uuid
import secrets
uuid.UUID(bytes=secrets.token_bytes(16))
这个能安全地用作 API 令牌或访问令牌吗?
你目前的方法在某种程度上可以说是安全可靠的,原因如下:
secrets
专门设计用于生成加密强度的随机数;token_bytes()
实际上只是调用了os.urandom()
,后者又从特定于操作系统的随机性来源返回随机字节。*建议- 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)
.hex
来获取一个漂亮的非连字符字符串。>>> uuid.uuid4().hex
'22c482ef3cd84c26bb49c0287828428f'
/dev/urandom
,它从诸如设备驱动程序之类的源收集信息。也就是说,这些信息是特定于生成机器的混乱信息,足够随机且不可识别主机计算机本身。