我目前正在使用Python生成UUID,如下所示:
import uuid
import secrets
uuid.UUID(bytes=secrets.token_bytes(16))
可以安全用作API令牌或访问令牌吗?
答案 0 :(得分:3)
可以说,您当前的方法是一种安全可靠的方法的两个原因:
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对象来获得一个漂亮的非连字符字符串。
>>> uuid.uuid4().hex
'22c482ef3cd84c26bb49c0287828428f'
*在Unix上,它是/dev/urandom
,它从诸如设备驱动程序之类的源中收集信息。即生成机器特有的乱码信息,但随机信息足够多,主机本身无法识别。